web小説礼賛記

さらなる俺 TUEE をあなたに!

シェル入門 #1: 動機

 黒い箱にコマンドを打ち込むことで、自在にデータを操作することができる。これこそがシェルの魅力で、一度ハマると、何でもシェルでやりたがるとか……。

シェルの魅力

作業空間として洗練されている

 どうも、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の教科書

 非常に気の利いた良書です。bashCLIのことがよく分かります。

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として

 執筆速度の自動監視。グラフやカレンダを生成して進捗を可視化。