エンジニアリングは手段であって目的ではない
最初に断っておくと、私の最終目標はエンジニアになることではない。
目指しているのは、AIを活用した何かしらの起業や事業開発だ。エンジニアリングはそのための手段の一つに過ぎない。
ただ、誤解のないように言っておくと、エンジニアリングやコードを書くこと自体は楽しい。新しい技術を学ぶたびに視野が広がるし、作りたいものが作れるようになる感覚は純粋に面白い。極めてポジティブな状態で、必要なスキルを一つずつ身につけているフェーズだ。
この前提があるから、「エンジニアとして正しい学び方」にはこだわらない。最短で実践に使えるスキルを身につけることを優先している。
独学で開発スタイルを構築している
周りにエンジニアがいない。会社にもいないし、プライベートでも聞ける人がいない。
この環境で開発スキルを身につけるには、自分で情報を集めて、自分で試すしかない。私が採用している方法は以下の3つだ。
- 技術書を読む — 体系的な知識のベースを作る
- AIに相談する — やりたいことを言語化し、選択肢を整理する
- YouTubeの動画を見る — 実際の操作感やワークフローを視覚的に理解する
これらを組み合わせて「これが良さそう」という仮説を立て、実践に移す。試してみて合わなければ別の方法を探す。この繰り返しだ。
Ghostty + Neovimという組み合わせも、この方法で行き着いた。
なぜGhostty + Neovimなのか
エディタ選びには大きく2つの流派がある。
- ターミナル派: Ghostty/iTerm2/Alacritty + vim/neovim
- GUI派: VSCode、JetBrains系、Zed
Neovimを選ぶ時点で「ターミナル中心のワークフローを好む」という自己選択が働いている。GUIの快適さを優先するなら、最初からVSCodeやJetBrainsを選ぶ方が合理的だ。
では、なぜあえてターミナル派を選ぶのか。
動機: Linux/AWSを操作したい
自分の場合、CUIに慣れたいという明確な動機があった。
- スタートアップでサーバーを自前で立ち上げる可能性
- AWS EC2インスタンスの操作
- ネットワーク設定やトラブルシューティング
これらの場面では、GUIエディタは使えない。sshでサーバーに接続し、ターミナルで作業することになる。そのとき使えるエディタは、ほぼvimかnanoの二択だ。
vimが最も汎用的な理由
サーバー上での作業を考えると、vimをある程度使えるようにしておくのは合理的だ。
- ほぼ全てのLinux環境にvi/vimがプリインストールされている
- 最小構成のDockerコンテナやAlpine Linuxでもviは入っている
- リカバリーモード、シングルユーザーモードでも使える
/etc/配下の設定ファイル編集はvimが事実上の標準
必要な操作は意外と少ない
「vimをマスターする」と聞くと身構えるかもしれないが、サーバー作業に必要な操作は限られている。
| 操作 | コマンド |
|---|---|
| 移動 | h/j/k/l, gg, G |
| 挿入モード | i, a, o |
| 保存・終了 | :wq, :q! |
| 削除・コピペ | dd, yy, p |
| 検索・置換 | /, :%s/old/new/g |
これだけで設定ファイルの編集は十分こなせる。そして、この操作は全てNeovimで練習できる。
Neovimで練習 → サーバーの素のvimでも使える
Neovimはvimの上位互換なので、Neovimで覚えた操作はそのままサーバー上の素のvimで使える。
逆に、Neovim特有の機能(LSP補完、Treesitter、プラグイン等)はサーバー上では使えないことが多いが、基本操作は共通だ。
Ghosttyは単なるターミナルエミュレータなので、Neovimの操作には影響しない。Ghosttyの高速レンダリング、True Color対応、ligature対応といった恩恵を受けながら、サーバー作業に必要なスキルを身につけられる。
UTMでUbuntuを試している
現在、MacにUTMを入れてUbuntu Desktopを動かしている。GUIも入っているが、意図的にターミナル中心で操作している。
これは学習目的として正しいアプローチだ。実際の本番サーバーはUbuntu ServerなどGUIなしが一般的なので、ターミナル操作に慣れておく必要がある。
慣れてきたらUbuntu Server(GUIなし)をUTMに入れると、より実践的な環境になる。
AWS環境も基本的に同じ
AWS EC2インスタンスも、基本的にはssh接続 + ターミナル操作だ。GUIなしのAmazon LinuxやUbuntu Serverが標準で、UTMでやっているターミナル操作がそのまま本番の作業に使える。
ただし、最近のトレンドとして:
- マネージドサービス(RDS、Lambda、Fargate等)を使うと、直接sshする機会は減っている
- IaC(Terraform、CloudFormation)でインフラをコード管理
- コンテナ化(ECS、EKS)でサーバーに入らず運用
つまり「sshしてvimで設定ファイル編集」は減少傾向だが、トラブルシューティングや緊急対応では必ず必要になる。
sshして調査・対応とは
「sshして調査・対応」とは、具体的にはこういう作業だ。
シナリオ: Webサービスが突然動かなくなった
# 1. サーバーに接続
ssh ubuntu@your-ec2-instance
# 2. アプリのログを確認
tail -f /var/log/app/error.log
# 3. プロセスが動いているか確認
ps aux | grep nginx
# 4. ディスク容量を確認(満杯で止まることがある)
df -h
# 5. メモリ確認
free -m
# 6. 設定ファイルを確認・修正
vim /etc/nginx/nginx.conf
# 7. サービス再起動
sudo systemctl restart nginx
普段はマネージドサービスやIaCで運用していても、問題が起きたらsshでサーバーに入り、原因を調べて直す。このときvimが使えないと詰む。
NASへのファイル共有とsshの違い
会社の共有サーバーにFinderからアクセスしているなら、それはsshではなくSMB/NFSによるファイル共有だ。
| 接続方法 | プロトコル | 操作 | 用途 |
|---|---|---|---|
| NAS接続 | SMB, NFS | Finder、ドラッグ&ドロップ | ファイルの読み書き |
| ssh接続 | SSH | ターミナル、コマンド | サーバー自体の操作 |
NASは「ファイルを置く棚にアクセスしている」、sshは「サーバーの中に入って操作している」という違いがある。
そして、ファイル共有の権限とssh権限は別物だ。多くの組織では:
- ファイル共有: 一般社員に開放
- ssh接続: 管理者のみ
sshで接続できるとサーバーの設定を変更できてしまうため、セキュリティ上、限られた人にしか与えないのが一般的だ。
まとめ
Ghostty + Neovimを選んだのは、Linux/AWSを操作するためにCUIに慣れたいという動機からだ。
- ターミナル中心のワークフローを好む人がNeovimを選ぶ
- GUIを重視するならVSCodeやJetBrainsの方が合理的
- サーバー作業ではvimが事実上の標準
- Neovimで練習した操作は、サーバー上の素のvimでそのまま使える
- 必要な操作は限られており、マスターまでは不要
今UTMで練習している内容は、そのまま本番のサーバー運用に活きる。入門ステップとして妥当な選択だと考えている。