シェル・ワンライナー160本ノックを終えて

junichi_y
·
公開:2023/11/23

Linuxやシェルへの苦手意識

サーバーサイドエンジニアとしてシェルスクリプトやLinuxに苦手意識というかコンプレックス的なものを持っていた。自分がエンジニアになったときにはAWSやGCPといったクラウドサービスが主流で、一応常設EC2を立ててバッチ処理を動かしたりアプリケーションを起動したりといった作業があったのでまったく経験がなかったわけではない。ただ、何かしらの言語でフレームワークを使ってある機能を開発するのに比べて、サーバー作業というのは様々な知識や経験を求められ毎回苦しみながらやっていた。

現代の開発現場においてはdockerやk8sといった仮想コンテナ環境が使われることが多いし、AWSのfargateやGCPのCloud Runといったサーバーレスのマネージドサービスも主流となってきており、開発者自らサーバーインスタンスに潜って何かするみたいな経験をすることもおそらく昔に比べて少なくなってるような気がする。

シェルスクリプトに関しては苦手意識を持ってはいたものの経験を積んでくるとスクリプト書きたいなと思うことが多くなり、毎回調べながら手探りで書いていた。Makefileなんかもそうかも

最近、PCが変わったときに初期設定的なものを一瞬でできるようにしておきたいなと思ってdotfilesを見よう見まねで作成してみた。そのとき、参考にさせてもらった方のシェルスクリプトがシェルの機能フル活用で理解するのが大変だった一方ですごいなと感心した。

その方のようなつよつよLinux使いのエンジニアの方は時折見るsedやawkといった呪文のようなワンライナーも息をするように書けるんだろうなという勝手な偏見もあった。

とにかく、シェルスクリプトやシェルについて今まで体系的に学んでこなかったのでどこかで学びたいと感じていた。

シェルスクリプト基本リファレンス

シェルスクリプトの書き方というのは意外とネットに情報がまとまってない。ありはするけど網羅的にまとまった技術記事などはほとんどない。なので「シェルスクリプト基本リファレンス」という書籍をまず買ってみた。

この書籍は正確な情報を伝えることを重要視しており正確な知識をできる。例えば、どのシェルで何が使えて、何が使えないのかまでちゃんと載っている。

今まで曖昧だった文法やコマンドを正確に学ぶことができた一方、こんないろんな構文が入り混じった状態で正確にスクリプト書くのむずいなと思った。

パラメーター展開とかはこの本で初めて知ったけどまじで呪文に見えるし、クォートの使い方もむずい。

シェルスクリプトで制御構文を書きたくないと言ってzxでTSで書きたくなるのもわかる。

とりあえず、曖昧だったものが全部正確なものとして知れたので買ってよかった。

シェル・ワンライナー160本ノック

こっちはもっと実務よりのシェルやLinuxコマンドを学べる。基本リファレンスの方は組み込みコマンドが中心だったけどこっちは外部コマンドが数多く出てくる。特にsedやawkはめちゃくちゃ出てくる。

とにかくワンライナーをひたすら160問解いていく。一気にやるとだらけるので1日5問を目安にこつこつやった。

160問完走したあとの感想としてはawkやsedを使った力技が身についた。スマートじゃないけどごりごりやってたら狙いのもの出力できたみたいな。

この力技はAtCoderのABCコンテストやってるときになんかワンライナーみたいな力技で解いてるなみたいな気持ちになったので、そういった泥臭い技術が身に付いたのかもしれない。

また、書籍ではrubyやpythonのようなスクリプト言語を使用したワンライナーも多くでてくる。grepやsedを使ってるときにMac標準のコマンドを使ってると挙動が違ってきて、オプション覚えるのも大変だったので使えそうなところはスクリプト言語を使用して解いていた。

Perlを今からやるのはあれだったのとPythonをワンライナーで使うのも使いづらそうだったのでrubyを使った。エンジニアになる前にrubyは勉強していて転職するときにrubyを選ばなかったのでもうrubyを触ることはないと思っていたけど思わぬところでrubyをやることになった。

rubyでワンライナーを書くのは思ったよりも便利で書いてて楽しかった。rbというワンライナー用のコマンドもあったりする。特に正規表現が強力だった印象。あんまり他知らないけど

ちょいちょい解説読んだだけのところも多いけどおおむね解いて、だいぶ得るものは多かったと思う。

読み終えての感想

シェルに関する書籍を2冊やってだいぶ土台の知識がついた。気がする。これらの書籍をやったことでシェルスクリプトなどは積極的に書いていこうと思えるようになったし、(逆にまともに書いてらんないとも思えたのでzxを積極的に使っていきたいとも思えたけど)awkやsedの使い方を覚えたことでネットなどで見かける呪文のように見えるコマンドも怖くなくなったし、なんなら使っていきたいと思えるようになったし、rubyを使ったワンライナーが思ったよりも楽しかったしやってよかった。

サーバーエンジニアとして同じようにシェルスクリプトやシェルに馴染みがないことに課題感を持っている人には大変おすすめ。

@junichi_y
エンジニアしてます。