黒い箱にコマンドを打ち込むことで、自在にデータを操作することができる。これこそがシェルの魅力で、一度ハマると、何でもシェルでやりたがるとか……。
シェルの魅力
作業空間として洗練されている
どうも、mobaです。先日Macを買いました。UNIX系のOSだから、とターミナルを使ってみると、以外と役に立っています。例えば、
連番のテキストファイルを生成
このコマンドで連番ファイルを作れます。
$ touch -a {0..24}.txt # 0.txt, 1.txt, .., 24.txt を作成
25回もファイルの新規作成 > 名前を付けて保存
する手間が省けました。これだけでも有用です。
目次の生成
各話ファイルの一行目に、タイトルを書くとします。ファイル名と一緒に列挙すると……
$ find * | sort -n | while read f; do > printf '%2d %s\n' "$(basename "$f" .txt)" "$(sed -n 1p "$f")"; done 0 プロローグ! 1 物語が始まるぞ! .. 11 ここで物語が一気に加速します。 .. 24 エピローグ
目次になります。この表示を 1 つのコマンド(スクリプト)にすれば、手頃に目次を見ることができます。
その他、小説データの処理
任意のルビ形式、任意の改行スタイル、自動ルビ、統計処理、執筆速度の監視、pdf/epub/mobi出力、docxファイル化、などなど……。すべてコマンドにします。こんなGUIは無いです。
CLI(コマンドライン)がマシン操作の基本になる
小説データに限らず、コマンドラインからは多彩な操作ができます。閲覧、編集、検索、ダウンロード、音楽の再生、n分後にマシンをスリープ、などなど。
ターミナルが基本的な作業場となり、開かない日は無くなるでしょう。「シェルが使えないマシンなんて!」と考えるようになるかもしれません。
けっこう本当の話です
リッチな機能が多い
シェルの文字列処理、Vimのテキスト編集、Gitの編集履歴、mecabの形態素解析。豊富な機能へのアクセスは、コマンドラインとして提供されています。
備考
Q. OSはWindowsで良い?
分かりません(え
Windows には PowerShell というのがありますが、 Linux シェルとは全く毛色が異なります。このシリーズで扱うのは Linux シェルで、特別な用意が要ります。
Windows では、 Linux の仮想環境を構築するのが無難だと思います。1つのウィンドウが Linux のように振る舞います。
WSLは、まともな環境を作るのが大変そうなのでお勧めできません。
Q. マシンスペックは?
あまり必要ありません。ただ、SSDの方が有利です。
Q. プログラミング言語は?
使えた方がいいです。
ただし、シェルはファイル操作を最速で書けるため、 一回性の操作は全てシェルで行う のが基本です。
Q. 習得時間は?
それなりに必要ですが、連番ファイル生成は、もうできますね。touch {m..n}.txt
でした。この調子で可能なことは増えていきます。
このシリーズが、取っ掛かりになると良いのですが。
入門方法?
本ブログの『執筆のためのシェル入門』
辞典的な部分と具体例で構成されています。上手く活用してあげてください。
参考書
始めた時こそ、本を読めば、時間を節約できます。何か買ってみてはいかがでしょうか。
mobaが買った本の話をします。(他にも良い本があるかもしれません)。タイトルは、Amazonページへのリンクになっています。
新しいLinuxの教科書
非常に気の利いた良書です。bashとCLIのことがよく分かります。
Linuxのことは簡単に済ませられています
コツとは無数にあるものですが、本社は細部に至るまで押さえてくれます。Ctrl+r
でコマンド履歴を検索できることを知っていましたか? mobaも、素直に始めからこの本を買っておけば良かったです。暗黙的な100の知が得られます。
シェルプログラミング実用テクニック
趣味に走るならこの本です。主にテキスト処理について強くなれます。シェルは文字列を受け渡しするプログラムなので、シェルに強くなれると言い換えることもできます。
文章量が多く、コードについて書きつつも、読み物としての面が強いです。内容的にもなかなかゴツい。二章まで読めば、残りは応用みたいなものなので、一旦読むのを止めてもいいかもしれません。
ワンライナ(一行のコード)でデータを加工するのが、この本の主なテーマです。基礎的な思想(アイデア)を述べ、その後はとことん実践的になります。
この本の中では、シェルスクリプトは書かれません。コマンドを自作する場合は、別の本を読むか、誰かのコードを真似ましょう。複雑になるならプログラミングで。
小説データの加工を目的とするなら、オーバーキルな本ですが、CLIを操る人の視点が見られるのは、大きな利点です。読めば相応の実力が手に入るでしょう。ただ読むときは、先にシェルのことを理解した方がいいと思います。最低限、文法は抑えておくことを勧めます。
フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門 改訂2版
bashシェルでブログのサーバを用意する、新しい入門書です。性質上、webもbashも簡単な説明となっていますが、エッセンスが盛り込んであります。
タイトルは凄そうですが、内容的には入門書なので(入門レベルで済む内容なので)、シェルの超技術だと期待しないでください。至って普通にシェルを使う本です。
目標: ディレクトリベースの執筆用管理ツール
仕様
原稿はtxtデータとして管理します。
簡単のため、原稿ファイル名を番号.txt
という形にし、タイトルは一行目に書きます。
構成
例えば、以下のようなディレクトリ構成にします。
$ tree -d -L 2 . ├── build # プラットフォームに応じた出力先 │ ├── narou # なろう │ ├── kakuyomu # カクヨム │ └── ebook # mobi, epub, pdf, .. ├── data # 資料(あれば) ├── drafts # 下書き(必要なら) ├── gnome # オートルビの設定ファイルなど ├── meta # あらすじなど └── posts # 原稿 ├── book_1 # 巻 │ ├── ch_1 # 章 │ └── ch_2 └── book_2 └── ch_1
静的サイトジェネレータ (SSG) の構成を真似てみました。
gnome
構成が綺麗にできたら、操作も綺麗に行いたくなるものです。小説データに対する操作は、CLIから行います。(エディタはGUIを使うかもしれませんが)。
小説データに対する操作の集まりを、暫定的にgnome(ノーム)と呼ぶことにします。
gnomeの実装?
あくまでシェルの講座なので、mobaはシェルスクリプトで書いてみます。しかし、プログラミング言語を使った方が簡単なので、実際にはお勧めできません。
プログラミングが初めてなら、Goがシンプルで良さそうだと思います。もちろん、bashでやってもいいですが。
gnomeに期待する機能
Viewerとして
目次、文字数カウント付きの目次。第n話をエディタで開く。
Converterとして
任意の改行スタイル、ルビ文字、自動ルビ、斜体など。pdfやmobi出力も。
Editorとして
話や章の挿入・入れ替え。タイトルの変更など。
Watcherとして
執筆速度の自動監視。グラフやカレンダを生成して進捗を可視化。