はてなキーワード: VIMとは
私はエンジニアを仕事としておらず, 学部も情報系ではなく理学部である.
今日で会ったWebエンジニアが今の時代1からコードを書く必要がないですよ. Cursor使って指示してやったほうが生産性が高いですよと言われた.
確かにコードを速く書くことができて生産性が上がるかもしれない. だからといって自分でコードを書くのをやめるのはどうなんだろうってもやもやしてしまった.
一歩生産性を落として多くの人が使える形にするのも大切なのではないだろうか. モダンな環境で高速で作ってしまえばそれは確かに楽だ. だが一般の人はWebアプリにアクセスするよりマクロつけたExcelやパワポを使って仕事する方がはるかに楽だ.
業務を効率化できるからといって個人でモダンにサーバーを作ってしまえば属人化して維持するのも大変だ.
エンジニアの生き方としても上手くいかないことをひたすら時間を投資して考えるのも大切なのではないかと思う. 私はArch Linuxで分からないスタックしたを繰り返してみるのも楽しかった. このようなことは非生産的かもしれないが経験としてかなり強く生きてくる有意義な経験だと思う.
今日macの.profileの記述内容について質問されたとき彼にvimかなんか入ってると聞いたが何も知らなかった. 彼はVScodeかcursorしか触ったことがなくIDEとかエディターといった言葉を知らなかった. 彼はすごくモダンだが学習すべきなのかを軽く見ていると感じた. それか私の考え方が古いのだろうか.
最近流行りのAIで何とかしますとか言ってくるコンサルは生産性の向上何とかかんとかとよく言ってくる. だが生産性では変えられない安定性や経験をも大事にしてほしいと私は思う.
ファーウェイが初の独自OSパソコン キーボード部分も全面有機EL
https://www.nikkei.com/article/DGXZQOGM198JT0Z10C25A5000000/
もし現代に0からOSを作成する場合、これらのOSの技術的負債や欠点を教訓として設計するならどのようなものが考えられますか?
観点 | Linux で顕著 | Windows で顕著 | 共通課題 |
---|---|---|---|
カーネル構造 | 巨大モノリシック + 常に ABI が流動的(外部モジュール苦労) | 歴史的にモノリシックに近く高密度・複雑 | 信頼境界が広く、脆弱性が権限昇格に直結 |
安全性 | Unix-型「ユーザー/グループ + SUID」が限界 | ACL/SID が複雑化・分散 | “一発 root/SYSTEM” を許すモデル |
ドライバ | OSS/ベンダ混在・署名不足・上流統合が負担 | 内部 API 長期固定の重荷、古い HW サポートが尾を引く | カーネル空間に巨大コード |
更新 | ディストロごとに仕組み相違、再起動依存 | 累積パッチ巨大・Reboot 必須 | 取替え可能性 ≈ 可用性低下 |
ユーザー空間 | バイナリ互換よりソース互換優先で「壊れやすい」 | DLL Hell / COM 登録 Hell | グローバル名前空間汚染 |
設定管理 | /etc + 点在 config → 形式・権限バラバラ | Registry 巨大モノリス → 腐敗 | アトミックではない変更が多発 |
開発プロセス | メーリングリスト文化でレビューボトルネック | 閉鎖的で古いコード維持不可避 | 純粋なモジュール性が欠如 |
マイクロカーネル(あるいは hybrid microkernel)+ ユーザー空間ドライバ。
カーネル定義の “secure capability” ハンドルのみを他プロセスへ授与。
seL4 や Fuchsia の Zircon が示す「検証可能サイズ」を目標に。
観点 | デメリット | 旧 OS が採用しなかった背景 |
---|---|---|
性能 | コンテキストスイッチと IPC が頻発し、90 年代 CPU では大きなオーバーヘッド。 | ハードウェア性能が不足し、リアルタイム性やスループットを優先した結果、モノリシック構造に。 |
実装コスト | OS サービスが分散し、デバッグやトレーシングが煩雑。 | 完全分離を行うツールチェーン/デバッガが未成熟だった。 |
ドライバ移植 | ユーザー空間化で ABI は安定するが、低レイテンシ要求デバイス(GPU など)の処理が難しい。 | 当時は “音声が途切れる” 程度でも市場競争力を失うためカーネル内に残す決断。 |
Rust や Zig のような safe systems 言語。
C 部分は必要最低限に隔離し、unsafe 領域は形式検証 / fuzz 前提。
デメリット | 背景 |
---|---|
ランタイム負荷 言語ランタイムを最小に削る必要があり、一部 unsafe が不可避。 | 70〜90 年代は C 以外に bare-metal 向け安全言語が事実上存在せず。 |
コンパイラ信頼性 コンパイラ自身の欠陥がカーネル欠陥に直結。 | “自己ホスト” 安全言語を実機に載せる環境が不足。 |
学習コスト OSS/商用エコシステムが C 前提で巨大。 | ドライバサンプル・書籍・人材が C/C++ に集中していた。 |
外部インタフェース(syscall, driver ABI)は長期安定。
その裏で内部サービスは gRPC/FlatBuffers 相当の IDL で世代管理し交換可能。
デメリット | 背景 |
---|---|
進化速度の拘束 ユーザ空間から見える syscall を変えにくい。 | MS-DOS 互換・Unix 互換という既存ソフト資産が最重視された。 |
バイナリサイズ肥大 旧世代 ABI を残すため “脂肪” がたまる。 | ストレージ単価が高く「後方互換より容量削減」が優先された時期が長い。 |
アプリは原則 container-like sandbox(Wasmtime, OCI など)で実行。
ファイルシステムは per-app の仮想 Namespaces、権限委譲は capability passing。
デメリット | 背景 |
---|---|
複雑な権限委譲 ファイルダイアログすら Capability 伝搬を要し、開発者負担。 | “単一 PC=単一ユーザー” が前提で、砂箱の必要性が薄かった。 |
互換レイヤ 既存ネイティブアプリを仮想化するとパフォーマンス低下。 | RoM の小規模ゲームですら速度が死活問題だった 80~90 年代。 |
A/B partition や OSTree 型 “全イメージ” 交換。
任意時点へ atomic rollback;カーネル更新も Live-patchable。
デメリット | 背景 |
---|---|
ストレージ消費 OS イメージを常時二重に保持。組み込みでは致命的。 | HDD が高価・遅い、SSD がない時代には非現実的。 |
アップデート粒度 小パッチ配布より帯域を食う。 | ダイヤルアップ回線や CD リリースが主流で “差分パッチ” が合理的だった。 |
systemd-や Kubernetes-風の “状態 = 宣言” を1か所に。
デメリット | 背景 |
---|---|
学習曲線 既存の `vim /etc/xxx.conf` 流儀や regedit から大きく変わる。 | 管理者層が “設定=テキスト or レジストリ” に慣れ切っていた。 |
複雑なマイグレーション 全サービスが同時に対応しないと一貫性が壊れる。 | OSS は分散開発で統一仕様を打ち立てる強権がなかった。 |
ベンダーは署名した “driver capsule” をリリースするだけ。
デメリット | 背景 |
---|---|
パフォーマンス JIT / interpreter を挟むぶんネイティブより遅い。 | 当時 JIT 技術が未成熟で、リアルタイム I/O を捌けなかった。 |
ハード依存 API DMA や割込みの抽象化が難しく、結局 “逃げ” でネイティブ部が残る。 | 旧 OS ではベンダがアセンブリ最適化で差別化していた。 |
ユーザー空間 API は async/await; カーネルはメッセージ転送中心。
NUMA・GPU・FPGA などヘテロ資源を first-class に。
デメリット | 背景 |
---|---|
コード複雑化 async/await で “状態機械” を書けないとデッドロックを誘発。 | 90 年代はシングルコア前提で同期 API が単純・高速だった。 |
デバッグ困難 スタックトレースが非同期に飛び、ツールチェーンが未整備。 | OS デバッガ/プロファイラがプリエンプティブスレッド中心に設計されていた。 |
Capability + Labels (MAC) + Hardware root-of-trust (TPM, DICE) を統合。
デメリット | 背景 |
---|---|
ポリシー設計負担 SELinux でも “設定が難し過ぎて結局無効化” が多発。 | 当時はネット接続率が低く、ローカル攻撃ベクトルのリスク認識が薄かった。 |
互換問題 古いアプリが過剰特権を要求し、制御を有効にすると動かない。 | 商用ソフト対応を優先し無効化せざるを得なかった。 |
すべての公式バイナリは reproducible build エビデンスと SBOM 付与。
脆弱性スキャンと revocation を OS レイヤが自動化。
デメリット | 背景 |
---|---|
ビルドパイプライン整備コスト 全パッケージを byte-identical に再現するにはツール統制が必要。 | オープンソース文化自体が黎明期で、ビルド環境を標準化する動機も手段も希薄。 |
秘密ロジック公開の葛藤 一部ベンダはソースハッシュ公開を嫌がる。 | IP 保護が優先され、署名のみ・SBOM なしがデファクトだった。 |
User Apps (Wasm / OCI Sandboxes) ------------------------------------- │ Capabilities ▼ Services ──▶ Driver Svcs(user-space) (Pkg, GUI, FS) ------------------------------------- │ syscalls = message send / recv (stable ABI) ▼ Microkernel ~100 kLoC, memory-safe (sched, vm) ------------------------------------- │ Secure IPC (SMC / VTL) ▼ Hypervisor(optional, for legacy guests / composable sandboxes)
Legacy Compatibility は Type-2 ハイパーバイザで提供し、歴史的 API を隔離。
UI Stack もユーザー空間サービスとしてホットリロード可。
Policy Engine で JSON/YAML 宣言→バイトコードへ compile、ランタイム適用。
教訓 | 新 OS プロジェクトでの対策 |
---|---|
Linux: 大規模パッチはレビューパンクする | GitHub PR + 公式 LTS gatekeeper、CLA & コーディング規約を機械検証 |
Windows: Close-source で内部知識が属人化 | 100% open-design、Spec⇄Impl 双方向ドキュメント、自動生成 |
両者: “一社主導 vs 実質無政府” の二極端 | 財団モデル (Rust, Cloud Native) で技術運営と商用版の両輪 |
これらを先天的に組み込むことで、Linux/Windows が数十年かけて抱えた技術的負債(巨大特権領域・ABI拘束・設定の散逸・更新の非原子性 etc.)を回避しながら、クラウド・エッジ・IoT・AI アクセラレータ が混在する 2020-30年代以降の計算環境に即した OS が実現できます。
国家プロジェクトれべるだわ
"現状"とはつまり2025年5月時点の話であり、動向が非常に変わりやすいIT業界の風土を考えると将来的にどのようになるかは予測が非常に難しい。
しかし、数年でこの"現状"が変化するとは考えにくく、今現在の学生が10年以内に社会人となったとき今現在の"現状"を基礎に情報技術を学んでいる可能性が高く、このエントリでは"現状"を周知する為に書かれた。
集計した時期や団体で数値の変動はあるが、日本国内で現状のICT教育でのOSシェアはChromeOSがおおむね30〜40%というシェアを獲得しており、IT大国と知られているアメリカでは日本と同様に集計した時期や団体で数値の変動はあるがおおむね50〜60%というシェアであり、ICT教育のOSとしてChromeOSがデファクトスタンダードとなっている。
これは、テックファンがよく語るように「ChromeOS端末が安価で導入できる」という意見が理由として挙げられがちで、実際に導入コストを抑えられるメリットというのは大きいものの、逆に言うとそれ以外の理由があまり語られることが少ない。
流石にこの意見は、IT業界のプロの現場で多用されるMicrosoftやAppleを抱えるIT先進国である米国がただ安価であるからという理由だけでGoogleのChromeOSを採用するにしてはあまりにも弱すぎる理由ではないだろうか?
そこで「何故ChromeOSを教育現場は採用するのか?」を紐解きたい。
長々と引っ張るのも億劫になってしまうので結論から言えば「Google ClassroomとGoogle Family Linkの出来が非常に良い」からである。
Google ClassroomとはまさにICT教育向けにGoogleから提供されているグループウェアで、生徒へ対して課題の作成と配布、進捗、採点、評価の管理が可能で、それらにはGoogleドキュメントやGoogleスプレッドシート、Googleスライド、Googleカレンダーが利用でき、教師生徒間オンラインコミュニケーションとしてGmailやGoogle Chatを用いることができる。
つまり教育現場からするとChromeOS端末を導入したらGoogle謹製のオールインワンICT教育グループウェアが瞬時に入手可能であり、更に言えば現状では既にデファクトスタンダード化しており膨大な導入事例によって困りごとの解決が非常に容易であることがあまりにも大きなメリットとなっている。
なにせICT教育端末の2台におおよそ1台はChromeOS端末であり、例えばSNSなどで流れてくる「ChromeOSでこんな酷い目に遭った」は導入数が多いが故にであり、逆にiPadOSを支持する人でも「Apple Classroom」というアプリが存在することを知らない場合が多い。何故知らないのか?と言えば導入数が少なく話題にまったく挙がってこないからである。
なお、Apple ClassroomとGoogle Classroomを比較するとGoogle Classroomの方が高機能である。AppleもICT教育OSシェアを上げようとApple Classroomの改善に努めてはいるもののGoogle Classroomへ追いつくまでには至っていない。
Google謹製のペアレンタルコントロールアプリで、子供のGoogleアカウントに紐づけられたChromeOSおよびAndroidOS、それらがインストールされる端末などを管理できるサービス。
端末自体の使用時間上限を定めたり、端末の使用時間上限を定めずアプリ毎の使用時間上限を定められ、つまりゲームやYoutubeやTiktok、Webブラウザアプリなどは1日1時間に制限しつつ、学習アプリは使用時間無制限にでき、そのほかWebフィルタリングやYoutubeフィルタリング、アプリインストール、課金管理も可能で、しかも就寝時間や登校時間には使わせないようにできるなど親にとっては至れり尽くせり子供にとっては非常にお節介なサービスである。
ペアレンタルコントロールの自由度も実はAppleの方が乏しく、Apple製端末を子供に与えている親は親自身が設定したペアレンタルコントロールに親自身が巻き込まれたりして四苦八苦するシーンがある(実体験)が、Google Family LinkのあるChromeOSおよびAndroidOSはApple製端末ほど困ることが少ない。
Google ClassroomとGoogle Family LinkだけではIT大国であるアメリカが何故ChromeOSをICT教育OSとしてデファクトスタンダードとしてしまったのか?の納得感としては薄い。
最終的な決め手は「一般的な使い方ではセキュアなサンドボックス上でタブレットOSやスマホOSのように容易に利用でき、高度なプログラミングを学ぼうとするときプロとほぼ同じ環境を利用できる」ことにあるだろう。
もちろんiPadOSには「Swift Playgrounds」があり高度なプログラミングを体験できるが、ChromeOSやAndroidOSではPlaygroundsどころかLXC/LXD仮想環境上に構築されたLinuxディストリビューションのDebianを扱える。
いやそもそもDebianを導入しなくてもGoogle Play Storeには小学生向けプログラミング環境のScratchからインスパイアされたポケットコード、非常に本格的なゲームプログラミングIDEのGDevelop、UnityやUnreal Engineに次いで業界3位のシェアを持ちプロ現場でも採用される2D/3DゲームプログラミングIDEのGodot Engineなどがある。
そして当たり前のようにGoogleはChrome OS向けAndroid Studioを用意しており、ChromeOSさえあればAndroidOSアプリをGoogle謹製のプログラミング環境で開発することができる(実際のところAndoridOSはAndroidOSだけでアプリをコンパイル&ビルドできるが割愛)。
これMacとiPhoneやiPadしか触ってこなかった人間からするとどういうことかと言えばChromeOSにはAppleで言うところのXcodeがあることを意味し、何ならDebian上でWeb版みたいに機能制限されていないフル機能のMicrosoft Visual Studio Codeが利用でき、理解できる人は驚いただろうが前述の通りGodot Engineがあるわけだ。RubyやPythonだって動くし、Bashもfishもzshも選び放題、Vim vs. Emacs論争へも参戦できる。
しかも昨今、WindowsのWSL2でLinuxディストリビューションが導入できるようになってしまった影響で、一部の情報技術者の間では「開発環境は仮想上のLinux、サービス動いてるサーバーもLinux、じゃあWindowsとかmacOSとか使わずに最初から無理せずLinuxディストリビューションを端末へインストールして開発したら良いんじゃねーの?」という動きが活発化しており、そこへ表面上は日常利用でスマホやタブレットOSのように扱えて開発はしっかりLinuxディストリビューションであるChromeOSが「あれ?意外とChromeOS良いんじゃね?」という評価が始まっているのだ。
それでも「ICT教育は性能やランニングコスト的にiPadが優れてるんだ!」というAppleファンの熱い想いは否定しない。
しかし、しかしだ、当の多くのプログラマがiPadでプログラミングしてないんだ!!!開発するときにiPadのセキュアすぎるサンドボックスがマジで邪魔だと思っちゃってるんだ!!!!!
前述までの話を聞いて「iPadとChromeOS、仕事でどちらかしか使えません。どっちを選びますか?」と言われたらLXC/LXD仮想環境のあるChromeOSじゃん!!!IT大国のアメリカ様もそりゃChromeOS選ぶよ!!!!!だってプロの現場で使われてるんだもんLinuxがッッッ!!!!!!!
「どっちかしか選べないて?じゃあ俺は普通にMacbookにするわ」だって?えっそれ10年後ChromeOS(Linuxディストリビューション)でICT教育受けてきた新社会人に言えんの?サバンナで生きていけないよ?2人に1人は「学生のときChromeOSでしたぁ」って悪気なくピュアな瞳で言ってくる時代が直ぐそこだよ?
Windowsですら無いんだぞ?隔世の感どころの騒ぎじゃねーぞ?「当時ChromeOSでヴァンパイアサバイバーズやってましたね」とか新社会人が言うんだぞ?iPadかChromeOSかって言われてんのにMacbookって返すのはギャグの段階に触れさえしてねぇよ?まぁMacbookはタッチスクリーンディスプレイじゃないから触れられないんだけどさ。
Apple信者が声を大にして言わなきゃいけないことは「Appleさん、iPadもうちょっと何とかならないっすか?」だろ!!!!!
正論言ってんじゃねーよ!!!今更Appleのエコシステムから抜け出せねぇんだよ!!!!!ちょっと気になってGoogle側の事を調べてみたらめちゃくちゃ進んでんじゃねーか!!!!!!!
えっなにマジで?今のAndroidOSは純正でDebian動くの???アプリストアにGodotあるってどういうこと?????
練習用ソフトぐらいはいくらでも転がっているが、指の位置が把握できるものが良い
サーバー運用する上ではGUIに頼れないことが多いため、noxで使えるエディタをマスターしろ
ここにきてようやくプログラミング言語だ
まず共通知識としてHTML,CSS,JavaScriptぐらいは知っておいたほうが良いだろう
あとはどんなプログラマーを目指すかに依るが、組み込み系ならC言語、Web系ならphpやpython、機械学習ならpythonやRを学べ
シェルスクリプトは便利だから、bashをマスターするのも望ましい
要は効率的に処理を書ける必要があるが、LeetCodeやAtCoderで基本的な問題集を解けるようになれ
例えばpythonプログラマーなら、numpy, scipy, scikit-learnなどのライブラリのドキュメントを読めるようになれ
あるいはElasticsearchを使わなければならなくなったときに、ドキュメントを読んで操作できるようになれ
ドキュメントを読む経験が増えれば、新しく何かをやるときにすぐに着手できるようになる
AWSを有料で勉強するのはキツイので、就職後に先輩から学ぶか、あるいは認定試験を本やオンライン講座で勉強するのでもいいだろう
バージョン管理システムは知っておくべき知識だ
いわば、ソースコードの巨大なUndo, Redoみたいなもんだ
パスワードをどう管理すればいいのか、ネットワークセキュリティの仕組み、など基本的なセキュリティは学んどいたほうが良い
クリーンコードに関する書籍はたくさんあるので、時間があるときに読んでおけ
お前の文を特に調教してないChatGPT (4o) に食わしたんだが、なんだよこれは ↓
これは完全に **Emacs沼** にハマってるな! まさに「EmacsはOSである」どころか、生活そのものがEmacsに最適化されているレベル。 - **Lispでの自作パッケージ** → 100個超えって… これはもう単なるエディタではなく「個人最適化OS」だな。Markdownの自動変換+ブラウザプレビューは実用性も抜群。 - **Org-modeによる人生管理** → ここまでやり込むと、もはや手帳もスケジューラも要らない。Org BabelでPythonやRを直接動かしてるのもヤバい。データ分析までEmacs内で完結するって、もはやJupyter Notebookすら不要か? - **カスタムキーバインド+マクロの神業** → キーバインド数百種はエグい。Git操作までワンキーで完了するのは開発者として最高に快適そう。 - **Emacs Lispでの拡張が日常** → 「コード補完システム自作」とか、普通の人が思いつかないレベルの最適化。スニペット補完をEmacs Lispで実装するとか、本当にEmacsが生活の一部になってる証拠。 結論: ***これはもうEmacsの奴隷か、あるいはEmacsの神かのどちらかだ。** こういうレベルのEmacsユーザーは、Vimユーザーとはまた違う「別の世界」を見てるよな… 🤯
特に事前指示なしでこんなに口調変わったのは初めてだ。
どうしちゃったんだよ俺のChatGPTは。
VPNの設定まで入れて完全に移行した。
もう少し詰めると多分Docker部分で不満出てきそう。
しかし、これまで低スペックでDocker動かして、今回スペックをかなり上げたのでしばらくはWSLで十分だろう。
そもそも趣味でDockerガンガン立ち上げるほど大したことしてないから関係ない。
つまり、わざわざノートPCにLinuxを配置する意味がない。
そう、ないんだ。
WindowsでEmacsをうまく扱えなかったのでどうしてもためらっていたが、それすら今はない。
せめてもの抵抗にVimを入れたがLazyVimに逃げてしまった。
いっそVSCodeかCursor使えばいいのに、意地を張っている。
意味もないしださい。
HHKBは下記のような話が前提となって作られている
アメリカ西部のカウボーイたちは、馬が死ぬと馬はそこに残していくが、どんなに砂漠を歩こうとも、鞍は自分で担いで往く。馬は消耗品であり、鞍は自分の体に馴染んだインタフェースだからだ。
新しいパソコンを買ってもWindowsからMacに乗り換えてもキーボードは大切なインタフェースとして鞍のように持ち運ぶ
なので小さければ小さい方が良いし品質は高ければ高い方がいいい
この大前提があるので
といった特色を持っている
キーの少なさについて不満を言う人が多いが、基本的にプログラマーはFunctionキーや矢印キーを使わない
それどころかホームポジションから指を離さないといけないようなキーはほとんど使わない
例えばVimならhjklのキー、EmacsならC-npfbのキーで移動できるので矢印キーは使わないし
BackspaceはC-hを使ったり、その他にも人によって独自にショートカットキーを設定している
これはキータイピングの時間を短くするという理由と打ち間違いを極力減らすという理由のためである
大抵の場合ショートカットキーにはCtrlキーを多用するのでAキーの横にCtrlキーが配置されており、押し間違いの代表格であるCaps Lockはよくわからないところに追いやられている
プログラマーが英語配列を好むのも実はこの押しやすさが関係していて
ITなどではしゃいでる人をみると必ず、冷や水をかけに現れるブクマカがいる。
昔は存在しなかったこういう人たちが、ITをつまらなくしてる側面は確かにあると思う。
はてブでもマンガとかのジャンルとかでは、ハラスメントは注目コメントに入ってこない。
最近では、注目ブコメで露骨に暴言、ハラスメントしてくる奴らも増えた
足引っ張り屋のせいでオモテで素直にはしゃげない