よう若いの。Linuxってのはだな。
どうしたんですか
例えば20代の若者、アプリケーションエンジニアをしている若者に対して。
飲み会でLinuxってのは本当にいいんだよ。俺の話を聞けよ。って30分くらいLinuxの説明をできたらいいな、って思っていたりする。でも気持ち悪がられる。だから、ここに書くことにした。
難しいんでしょ
いや、そうなんよ。むずい。
そもそもなんでLinux使いこなせるようになったらいいのかとか、Windowsだけで困ってませんけど、みたいな話でもある。その気持ちはすごくわかるし、2010年前後くらいのIT環境では、そのうちLinux(ていうかUnix系OS)なんてそのうち絶滅するかなと思ってた。
Linuxのことを全然知らない人からみたらやな、やっぱりLinuxだよな、とか言ってるやつらって、「やっぱり蕎麦は自分で手打ちしてなんぼやで」みたいに言ってるように見えると思う。いや、買えばいいやん、としか思わないよね。水加減難しいだなんだって、買えば食えるやんと。
実際には、メリットもあるものの、確かに専門性が高いものでみんなの必修スキルではないかなという気持ちもわからなくはない。
じゃあやっぱりいらないかな
しかしDockerが現れた。DockerがなければLinuxなんて覚えなくても良かったんじゃないって思うよ。でもDockerが便利すぎるんだよ。そのせいだけで、Linuxやっといたほうがいいよって言えるね。
Dockerのとてつもなさは、とにかくソフトウェアを開発したり、学習したり、実験したり、なにかするときの基本動作としてえげつないスピード感を与えてくれること。オープンソースやGitとの相性が抜群。環境を構築するとか、設定するとか、デプロイするとか、そういったところのショートカートがスゴい。そして軽い。
同じことやるのに15分かかるのと2分でできるのと、早い方がいいのは子供でもわかる。でもアプリケーションエンジニアの世界で、この速さと、やりたいことを駆動するときにOSやPCにかける負荷が低いっていうのが、どれくらい心理的にも抵抗が低くて、自分の幅を広げてくれるか、とんでもない違いなのがわかるやろ。
それから、Dockerにはひとつひとつのアプリケーションを動作させるためのインストールや設定が、OSを汚さないというこれもとんでもないメリットがあるわけや。
現代ではDockerを使うためにLinuxを学べ、と自信を持って言えるな。
ちなみにその先にKubernetesとか色々あるけどそれは今度でいい。Dockerしか使えなくてKubernetes知らなかったら恥ずかしいとか思うな。Docker知ってるか知らないか、の重要さに比べたら大した差ではあらへんな。
Docker使えるようになるために最短でLinux学べばいいと思うで。
どうやって勉強したらいいかな
先に、私のLinux遍歴から聞きなさい。
Linuxにはディストリビューションってのがあってだな。それが何かはぐぐってな。生まれて初めてはVine Linuxというディストリビューションで、雑誌にCD-ROMが付録でついとった。
それをパソコンのドライブに突っ込んで電源をONすると、パソコンが「サーバ」に生まれ変わるというのをどうしても試してみたくて試行錯誤し始めたら、なんか楽しくてしょうがなかった。2003年か2004年くらいかな。
Linuxはオープンソースという性質上、お金が全然かからなくてそれが夢のようで、何種類試したかわからないくらい、そこから色んなディストリビューションを動かしてみるのが中毒のように楽しかった。
DBはPostgreSQLとかを動かして、Apacheの設定をViで書いて、メールサーバとかFTPサーバとか色んなものを立てて飽きたら壊してまた似たようなものを作るとか、やってるうちにわからないことが無限に出てくるからネットで調べてっていうのを永遠にやってた。
今と比べると、なんとなく当時は時間の流れがゆっくりだった気がするな。ずっと意味もなくいじっていたけど、やっぱり「誰も知らない奥深い世界をこっそり歩いている」という、あのオタク独特の喜びを味わってたのは覚えている。
わかんなくなってきたんですけど
当時だと学びのための環境をもつには、やはり中古でもいいからPCを一つ犠牲にするしかなかったけど、Linuxを動かす環境はそこから色々と幅が広がった。
- AWSなどのクラウドでインスタンスを立てる
- Hyper-V、VirtualBoxなどでVMとしてWindows PC上に立てる
- 前項と似ているが、WSLを利用する
今だと、多少月額費用が許容できるならAWSかAzureに、1CPUのインスタンスでいいから立てて触ってみるのがええだろうなあ。WSLでも十分ではあるが、サーバだ、っていう感がどうも弱くなる。興奮しない。
興奮でいうと、ちょっとチャレンジ度合いが高くなるが、ちょっと古くなったデスクトップPC(タワー型でCPUはCore i5以上くらい)を流用するか中古で安く買って、VMWare ESXiの無料版を使うとめちゃくちゃ昂ぶる。
こうやって環境を手に入れたら、最初はDockerを使わずにWordpressでブログサイトをインターネット公開してみるまでをやってみると良い。手組みのPHPかRubyかPython、もしくはJava SpringのMVCあたりのアプリを公開してみる練習をしてみてもいい。
まあ、できるだけ早くコンテナ前提で物事を考える脳みそに移行はした方がいいとは思うが、ここは難しいけど、最初からコンテナありきで手法を勉強し始めるとちょっとメカニズムそのものの理解が大事なところが飛ぶよな。そうでもないかも知らんが。
先生、そろそろ他の話しませんか
しないよ。Linuxだよ。
初心者がLinuxの操作を何も知らず、SSHでサーバに入れたけど固まってしまうのはわかる。まずはファイル操作から覚えればいい。この時間は少し辛いが、cdとかlsとかベーシックなコマンドをある程度覚えたらええな。それからviでテキストファイルを編集できるようになる。nanoとかもあるけど、viが一番潰しがきくからいいよな。
その後はやっぱり、まずはWordpress動かして見ろと。他でもいいけど、目標としてなにかを公開するぞ、というのは持ったほうがいい。
最初はUbuntuがオススメで、sudo apt installで、興味が湧くものを色々動かしてみるのがいいな。ファイル操作をちょっと覚えたら、とにかく無料で使えるソフトで興味が湧くものをインストールしまくろう。無数にあるから。
そのくらいまでたどり着いて、できることが増えてなんとなくわかってきたな、となったら次は自分の業務にも活用することを考えて見るといい。
先生、もうぼく終電が
業務に活用?イメージが沸かないというか、自分が担当している業務では、そういうのがないと思ったらそれはそうかもな。
ほんなら、Zennに記事を書いてみるのをあえてWSL上でやってみるってのは手始めにいいかもな。なんせワイも今この記事をそうやって書いてる。WSLやけどな。DockerでZennのCLIのコマンドを使ってて、プレビューとかに利用してる。
Linux上に一つディレクトリを切って、以下のような手順で整備してみ。
1. ディレクトリを掘るs
mkdir -p ~/work/zenn-sandbox
cd ~/work/zenn-sandbox
2. docker-compose.yaml を置く
services:
zenncli:
image: node:24-alpine
container_name: zenncli
working_dir: /app
volumes:
- ./:/app
ports:
- "3000:3000"
nodejsをWSLにインストールしない。Dockerでnodeを動かす。
3. package.json を置く
{
"name": "zenn-sandbox",
"private": true,
"type": "commonjs",
"dependencies": {
"zenn-cli": "^0.1.159"
}
}
4. 依存パッケージをインストール
ここからは、作業しているディレクトリ自体をnodeのコンテナを経由していじっていく。
docker compose run --rm zenncli sh -c "npm install"
5. 記事を1本作る
docker compose run --rm zenncli sh -c "npx zenn new:article && chown 1000:1000 -Rf ./"
chownを入れてるのは、コンテナ内で生成したファイルの所有者をWSL側ユーザに戻すためやね。VSCodeでWSL繋いで記事を書いていると、ちょっとファイルのパーミッションがややこしくなるのでこれで逃げてる。なんか違うやり方もあるかもだけども。
6. プレビューを起動
docker compose run --rm -p 3000:3000 zenncli sh -c "npx zenn preview --port 3000"
起動したらブラウザで http://<<WSLのIP>>:3000 を開けば、書いた記事をその場で確認できる。
7. ファイル構成の目安
zenn-sandbox/
├── articles/
├── books/
├── images/
├── docker-compose.yaml
└── package.json
こうしてできたレポジトリをgit initしてGithubにプッシュする。そしてZenn側でちょいちょいと設定すると、あとはVSCodeなんかで執筆してGit経由でZennに記事を投稿していける。
先生、帰らせてください
うん、お疲れ様。明日も飲みに行こな。
Discussion
多分Webの環境をつくるだけなら
Blazorの方が早く作れるかな
こちらだと5分もあれば
先生、自分は朝までいけます
LinuxじゃなくてBSDの方がいいんだよ。かゆいところに手がとどくというか。。。なにぃ!? 貴様、何FreeBSDとかヌルいの使ってんだ。漢ならNetBSDだろが!
とかいう、前世紀の人間がやって来ちゃいけないですね、スミマセン。Linuxいいよ、Distroは好きなやつ試してみようね。(ハート)
良い記事をありがとうございます。Dockerは世界を変えたよね。
トライアンドエラーでうまくいく時の脳汁の感覚を久々に味わいたい気持ちになった
Vine懐かしいなぁ。
最初に触ったLinuxはSlackwareだったから、rpmでバイナリインストールできるRedhat系のディストリビューションには感動したな。当時はTurbo LinuxやLaser5なんかがあって日本勢も頑張ってた感があった。
ちなみにエディタはemacsを日本語化したmuleを使ってたな。メーラーはもちろんMew。pppで電話回線接続してメールを送ろうとするんだけど、メールアドレスを持っている人が周りにいなくて…
いかん、終電逃して朝まで語れるな…
時代の先輩方から聞きたいのは
LinuxよりUnixの話だったりする
個人では試せない筐体の古さと規模なので……
あえて白黒しかないSolarisのMuleとか
いま使ってみたいわ
誰も見ないと思ってふざけて書いたのに人がたくさんきている。。。コメント全部わかり見ですがバタバタしてるので個別の返信は差し控えます。
ただなんか、趣旨に反して老害側の方が多めに寄ってきてるw
先生、面白いのでもっと聞かせてください
さかなおるやん
タイトルに引き寄せられた老害です。最初に入れたLinuxはSLSでFDが数十枚。この枚数になると2,3枚は不良品が混ざりました。Seekエラーが出たら不良FDを交換してまた最初からやり直し。初期のLinuxは、スクリーンエディタが動作しないことも多く、最悪backspaceも使えないのでcatでプログラミングという時代。
かつて当時現存する Posix 準拠の OS の NFS 相互接続運用を試しとけって言われたものです。Apollo は素晴らしかった。DomainOS 上でAegis (だったか?),System/V, BSD みんな動いてた。HP にもらわれて無くなっちったけども。
Sun Solaris, HP-UX, NEC 4800, OMRON, SONY, IRIX, taitan(あとなんだっけ?) , みんな繋がってDN10000のファイルをいごいごできたなぁ。
初めてvi(というかvim?)をプロっぽく 使ってる人を見て、これ何やってんの?って思いました。
そして、そのうち自分もvimに慣れてきた
いまだにemacsは使えない
私はもともと PC9801、MS-DOS世代なんですが、C-BUSのモデム指して、ダイアルアップでインターネットしてたりとか、パソコン通信とかしてて、その後、linuxも触りだすようになりました。
コマンドは dir(MS-DOSコマンド)か ls (linuxコマンド) か混乱するときが結構ありましたが、仕事でlinux上で開発するようになってからは ls にすっかり慣れました!(最近はめっきり減りましたが、、)
若いの、PC9801ってのはな、、(ちなみにEPSON互換ってのもあってな、、)ってのもニーズあるのかなww
ubuntu20.04とかそこらへんからなので昔の話はすごく興味あります
相変わらずバタバタしていますがコメントありがとうございます。終夜営業のフリー
老害ショットバー、開業しました。。。