【11/30(日) 大阪開催】zshの勉強会を開催します

11/30に大阪でzshの勉強会を開催します。

zshの勉強会を開催するのは初めてなので、初心者のかたも歓迎です。zshをどう使えばよいか分からないとか、みんながどういうふうに使っているのか知りたいとか、そういう情報共有の場にできればと思っています。ぜひ参加してみてください。

詳細

日時
2014/11/30 (日) 13:00 - 17:00
場所
大阪府大阪市北区曽根崎2-5-10 梅田パシフィックビル 6階
定員
30人
参加費
無料
申し込みページ
http://uchuzsh1.peatix.com/

内容(予定)

  • 今から始めるzsh
  • 本格的に始めるzsh
  • vcs_infoを使おう
  • pecoを使おう

その他

  • 参加者の方の発表も募集中です。発表希望の方は@mollifierまで連絡ください。
  • 会場には無線インターネット回線、プロジェクタ、スクリーンがあります。
  • 後半は自習の時間として、その日学んだことの確認や、zshについての質問にみんなで答えたり議論する時間とします。
  • 懇親会は行いません。

よろしくお願いします!

WEB+DB PRESS Vol.83でzshの特集記事を書きました

2014年10月24日発売のWEB+DB PRESS Vol.83で、「zsh大活用」というzshに関する特集記事を書いたので紹介します。

WEB+DB PRESS Vol.83

WEB+DB PRESS Vol.83

目次

  1. 第1章:zshを使おう 毎日向き合うシェルだからこそこだわりたい
  2. 第2章:おすすめ環境設定 基本的なカスタマイズだけでここまで快適になる
  3. 第3章:プラグインの活用 Git連携や補完をさらに強化する拡張機能たち
  4. 第4章:外部ツールとの連携 Anything風インタフェースpecoとターミナルマルチプレクサtmux
  5. 第5章:補完ファイルの作成 新しいコマンドもzshに対応させる

内容

zshの特徴や使い方については、Web上でもいろいろと紹介されているし、僕もQiitaやこのブログなどで紹介記事を書いています。でも、そういうのはたいてい個別の機能を紹介した単独の記事で、zsh全体を通しての使い方が解説がされているわけではありません。なので、なんとなくzshを使っているけど最近の標準的な設定が分からないとか、他のみんながどういうふうに使っているか気になるとか、もやもやしたものを感じている人もいると思います。そういう疑問を解決するためにこの特集記事を書きました。

この記事を読めばzshの使い方を一通りおさえることができます。また、zshが標準で持っている機能だけでなく外部のプラグインを活用した使い方も解説しているので、シェルをばしばしカスタマイズして使うような今どきの開発環境が構築できるようになります。

シェルは開発の基本なので、一度カスタマイズしておくとそれ以降の操作が格段に快適になります。今回の特集を参考にして自分なりのシェル環境を作ってみてください!

記事を書いた感想

今回、僕がこうやって雑誌の記事を書くのは初めてのことでした。普段は自分のブログとかに短めの記事を書くことはあっても、まとまった原稿を書いたことはありませんでした。なので、始めに記事を書くお話を受けたときはびっくりしたし、不安もありました。でも、僕はzshが大好きで今までいろいろと解説記事を書いたりしていたので、そういう自分のzsh活動をまとめる良いチャンスだと思い、今回の執筆に取り組みました。

原稿はMarkdownで書いてGitHubにコミットし、進捗管理や修正作業もすべてそこで行いました。なので普段のブログ記事を書く感覚に近く、雑誌の記事だからといって特別な手間もなく、本来の内容に集中して作業ができました。そんな感じで作業環境がうまくシステム化されていて、担当者さんの協力もあって今回の特集記事が完成しました。 関係者の皆様、ありがとうございました。

というわけで、10月24日発売のWEB+DB PRESS Vol.83をぜひ読んでください。そして、感想などがありましたらアンケートハガキを送ったりTwitterでつぶやいたりしてみてください。よろしくお願いします。

UNIXシェルスクリプト マスターピース132 という本のレビューをした

友人の大角(id:ozuma)が最近「UNIXシェルスクリプトスターピース132」という本を書いた。シェルスクリプトの実践的なサンプルをいっぱい集めた本だ。

UNIXシェルスクリプト マスターピース132

UNIXシェルスクリプト マスターピース132

僕もこの本の制作に関わっていて、原稿のレビューをした。レビューというのは書評という意味ではなく、ソースコードレビューのレビュー。

いろいろ思うところがあるので、レビューというのがどんなものなのか含めてちょっと紹介してみる。

どんな本か

サーバー管理とかで使うようなシェルスクリプトのテクニックを紹介してる本で、実践的な見本のスクリプトが132個載ってる。実際シェルスクリプトでやりたいことがあったとして、それをどう書けばいいか分からない、みたいなことはけっこうあると思う。そういう人向けのサンプル集といった位置づけの本だ。

あと、Linux, BSD(FreeBSD), Mac に対応していて、どの OS でも動くように書いたり、OS ごとに違うところは「Macのときはこう書く」みたいに補足で説明したりしてる。親切。

作業の環境

原稿やレビュー内容のやりとりはサイボウズLiveで行うことにした。

まず著者が一週間分の原稿を投稿し、その内容をレビュアーが確認してコメントで指摘事項を書く感じ。これを毎週繰り返した。一週間でだいたい5から7Tips、全部で132個Tipsがあるので5ヶ月ぐらいかかった。初めはレビュアーは僕一人だったが、主に僕の負荷的な都合で途中からレビュアーをもう一人増やしてもらった(ありがとう)。

確認用のマシンとして Linux, BSD, Mac が必要になった。Linux は普段のメインマシンとして使っているのでそれをそのまま使った。MacMacBook Air を持っているのでそれを使った。BSD は持ってなかったので、VirtualBoxFreeBSDをインストールして使った。

何をしたのか

レビュアーとして僕が何をしたかというと、本としての体裁とか日本語の表現とか、そいういう国語っぽいところはほとんどチェックしていない。そうではなくて、シェルスクリプトのプログラムとしてのレビューを行った。開発で行う普通のソースコードレビューに近くて、だいたいこんな感じのことをした。

  • 意図した通りに動作するか
  • バグはないか
  • Linux, BSD, Mac どれでも動作するか
  • もっと良い書き方はないか
  • 別解(別の書き方)はないか

元の原稿の時点で根本的に間違ってるみたいなことはなかったけど、細かな間違いや不具合はけっこうあった。例えば通信エラーやファイルが存在しないような異常時の処理が考慮されていないとか、文字列内にスペース、改行、カンマなどが含まれているときに問題があるとか。"$var" とダブルクォートで囲わないとダメなところが $var とそのまま書いてあるようなパターンもけっこうあった。

誤記とか typo とかもチェックした。普通のコードレビューなら些細なことだけど、本として出来上がったものに誤記があるとかっこ悪いし紙に印刷してしまったものは修正できないので、けっこう大事なところだと思う。なので例えば英単語は辞書で確認したりとかした。

著者はスクリプトとしてどう書くかとか文章としてどうやって説明するかとか、そういう本としてのメインのところを意識して書いているだろうし、自分が書いたものは当然正しいと思ってるので、細かいところまで気が付きにくいと思う。

それに比べて、僕はまず前提として「間違いがあるかもしれない」と疑って色んなパターンを考慮して確認やテストをしたので、そういう細かいところを指摘できたんだと思う。

逆に言うと細かいところしか指摘できてないわけなんだけど、その分著者が些細なことを気にせず本来の記述に集中できるわけで、役割分担としては有効に機能してたと思う。

レビューの様子

最初のきっかけとしては、著者の大角から「シェルスクリプトの本書くんやけど、レビューやってや」みたいな感じで依頼が来た(もうちょっとフォーマルな頼み方だったかもしれない)。そういうレビューは初めてだったけど、シェルスクリプトは好きだし、大歓迎で OK の返事をした。

著者曰く「小さな Tips をいっぱい載せる本で、Tips 単位でレビューできるので普通の本よりやりやすいよ、簡単だよ!」という話で、シェルスクリプトは僕も書けるし、作業内容についてはまあいけるだろうと考えてた。今考えると死亡フラグだったと思う。

実際に初めてみるとこれがなかなか大変で、異常系とかいろんなパターンを考えながらのテストは思ってたより難しいし、それを Linux, BSD, Macと3つの環境で確認するとなるとけっこう時間がかかってしまった。平日の夜になんとか時間作って少しやって、残りは週末まとめてという感じで進めた。

最初の週にとりあえずユーザーインターフェース周りの Tips をやってみたんだけど、これがかなり難しいし、めんどくさかった。

  • 「パスワード入力の際に、ユーザーのキー入力を表示しないようにする」
  • 「ユーザーのキー入力を1文字だけ取得する(入力時にEnterを不要にする)」

とかで、「いきなりこんなマニアックなもん載せるのかよ」とか思ってた。結論としては最初の週にやったやつが一番難しかった。

だいたい、よく考えたら普通一冊の本に132個もコードが載ってるのだろうか。標準より多いように思う。

結局途中からもう一人の人にもレビュアーとして参加してもらった。それでだいぶ楽になったし、後半作業にも慣れてきたこともあって、無事全部のコードのレビューが完了した。

レビューを通していろんなスクリプトを試したし、man を読んだり参考サイトを調べたりもした。著者は当然僕よりもっとやってる。

10のことを人に伝えようと思ったら100ぐらいのことを知っていないといけないと思う。本というのは人に何かを伝えるためにあるんだけど、今回一番勉強になったのは書いた人本人なのかもしれない。

この本が多くの人の元に届くことを期待しています。

最後に

実家の親に本のレビューをしたことを伝えたら、「あんたなんかがそんなことやって大丈夫か」みたいなこと言われた。あんまり信用されてないようだ。次に実家に帰った時にはその本を持ってこいと言われた。なんとなくうれしそうにしてた。

ファイルの真ん中を出力する body というシェルの関数を作った

はてなブログGist からの貼付けに対応したようなのでさっそく試してみる。

これは何?

ファイルの先頭だけを表示する head, 末尾だけを表示する tail というコマンドがあるので、それに習ってファイルの真ん中を表示する body というシェルの関数を作ってみた。開始と終了の行番号を指定したら、フアイルのその範囲内だけを出力してくれる。

ソースコード

これを .bashrc とか .zshrc に書けば OK。

開始行と終了行を指定して、ファイルのその範囲内だけを出力するシェルの関数

使い方

body 開始,終了 フアイル名 という形式で使える。

# file1.txt の10行目から20行目までを出力する
% body 10,20 file1.txt

開始、終了を省略することもできる。省略したらそれぞれ「先頭行から」、「末尾行まで」という意味になる。

# 1行目から20行目までを出力する
% body ,20 file1.txt

# 10行目からファイルの最後までを出力する
% body 10, file1.txt

それと、ファイル名を省略したら標準入力から読み込むようになる。

なんかテキストファイルにずらずらメモ書きして、必要なとこだけ取り出したい時に使うと便利。

関西Ruby会議05で LT の発表をした

2013/08/31(土) に大阪で関西Ruby会議05が開かれた。僕は LT 枠で発表することになっていた。あんまり Ruby 得意じゃないのでどんな話しようかけっこう迷っていて、けっこう緊張しながら参加した。

発表内容

発表のタイトルは「C# から Ruby に乗り換えた」。最近社内で Ruby を使おうという動きがあったのでそれについて話した。

補足しておくと、今回は LT で5分しかなかったので若干誇張して話したけど、決して Windows をdisりたいわけではない。

発表では「哲学」という言葉を使ったけど、まともなものには作った人の意図があると思う。それを理解した上で自分にあったものを使うのが大事だと思う。間違った、または意図にあわない使い方をして「使いにくい」とか言っても不幸になるだけ。そういうことを言いたかった。

Ruby は「プログラミングを楽しむ」ことをとても重視していて、僕はそれに共感して Ruby が良いと判断した。楽しむことが最優先でない人はまた別の言語とかを選べば良いと思う。それぞれ向き不向きがある。

真にゴミなものは「哲学」が無いものだと思う。

初めて Mac で zsh を使う人のためのチュートリアル

俺聞け4というイベントで zsh について発表しました (その時の発表資料)。「普段シェルを使っていない人でも zsh を使うと便利だよ」という内容で発表したので、それを聞いて使ってみようと思った人もいたようです。

でもググってみても色々分かってる人向けの記事はありますが、「どうやって起動するんですか?」という本当の初心者のための記事はあんまりありません。

そういう初めての人にも zsh を使って欲しいと思ったので、初心者向けの入門記事を書きました。Mac を使えば簡単に zsh を始めれるので、使い方が分からないという人は参考にしてみてください。

ターミナルを起動する

zsh「ターミナル」というアプリを起動して使います。

「アプリケーション」 -> 「ユーティリティ」の中に「ターミナル」があるので起動してみましょう。

次回起動するときのために Doc に追加しておくと便利です。

zsh を起動する

ではさっそくコマンドを実行してみましょう。次のように入力してみてください。

% ps

先頭の % はプロンプトと言ってコマンドの入力場所を表す記号です。実際には % の後の ps の部分を入力してください。(%$ などと表示されているかもしれませんが同じ意味です。この記事では % で表します)

このように表示されたでしょうか。

% ps
  PID  TTY            TIME CMD
  229  ttys002    00:00:08 bash

数字の部分は人によって違うと思いますが、2行目で bash というコマンドが動いていることが表示されています。

bash はシェルの一種で、Mac ではターミナルを起動すると bash が起動するようになっています。このように最初に起動するシェルのことを「ログインシェル」と呼びます。

今回は zsh を実行したいのでした。zsh は Mac に標準でインストールされているのですぐに実行できます。

% zsh

もう一度 ps を実行してみましょう。

% ps
  PID  TTY            TIME CMD
  229  ttys002    00:00:08 bash
  258  ttys002    00:00:02 zsh

今度は zsh という行が増えています。無事 zsh が実行できているようです。

zsh を終了するには exit コマンドを使います。

% exit

ログインシェルを変更する

毎回 zsh と入力するのは面倒なので、自動的に zsh が起動するように変更してみましょう。ログインシェルを zsh に変更すると bash の代わりに zsh が最初に起動するようになるのでうまくいきます。

まず zsh がログインシェルとして指定できるかどうかを確認します。以下のコマンドを実行してください。

% cat /etc/shells

表示はこのようになると思います(環境によって若干変わります)。

/bin/bash
/bin/csh
/bin/ksh
/bin/tcsh
/bin/zsh

/bin/zsh という行があるでしょうか。

これはログインシェルに指定できるシェル一覧を表示しています。ここに /bin/zsh が無いと zsh がログインシェルに指定できないので確認してください(普通はちゃんとあります)。

/bin/zsh という行を確認したら、次のコマンドでログインシェルを zsh に変更します。

% chsh -s /bin/zsh

このコマンドは間違えると最悪ログインできなくなってしまうので、間違えないように落ち着いて入力してください。

その後にパスワードを聞かれるので Mac にログインするときのパスワードを入力します。

これでログインシェルが変わりました。

一旦ターミナルを閉じて再度起動してみてください。今度は bash ではなく zsh が起動しているはずです。

確認のために ps を実行してみましょう。

% ps
  PID  TTY            TIME CMD
  229  ttys002    00:00:08 zsh

zsh という行があるので zsh が起動していることが分かります。

設定ファイルを書く

zsh の設定はホームディレクトリの .zshrc というファイルに書きます。

ホームディレクトリというのはユーザーごとに割り当てられたディレクトリ(フォルダ)のことで、/Users/(ユーザー名)/ という場所にあります。僕の場合はユーザー名は mollifier なので、ホームディレクトリは /Users/mollifier/ になります

また、Finder では「Macintosh HD」->「ユーザ」->「(ユーザー名)」と選択すると表示できます。

ではターミナルでホームディレクトリに移動してみましょう。通常は起動時にホームディレクトリにいる状態になっていますが、次のコマンドを打つと確実にホームディレクトリに移動できます。

% cd

それでは .zshrc ファイルを作成します。次のコマンドで作成できるので入力してみましょう。

% touch .zshrc

本当に作成できたかどうかは次のコマンドで分かります。

% ls -a

ずらずらと表示されたと思いますが、その中に .zshrc があることを確認してください。

ただし、こうやってたくさん表示された中から必要なものを目で追いかけて探すのはあまり賢くありません。こんな時は検索するのが常套手段です。

% ls -a | grep zshrc

今度は .zshrc と1行だけ表示されたはずです。こんなふうに入力すればたくさん表示された中から zshrc を含む行だけに絞り込んで表示できるようになります。

文字列を検索するときは grep というコマンドをよく使うのでまた覚えておいてください。

本題に戻ります。zsh の設定ファイルを書きたかったのですよね。

設定ファイルは自分の好きな設定を書けば良いのですが、自分で調べて書いていくのは結構大変なので今回は見本を真似することにします。

1つ目は本当に最低限の設定です。行数が少ないので内容自体は分かりやすいでしょう。そのかわりあまり便利な設定は入っていません。

2つめはもう少し高機能な設定です。zsh を日常的に使おうという人はこちらの方をおすすめします。

この内容をコピーして、さっき作った .zshrc ファイルに貼り付けます。

このとき、CotEditor など GUI のエディタを使う人は注意が必要です。実はホームディレクトリを開いても .zshrc は表示されないのです。.zshrc のようの .(ドット)で始まるファイルは隠しファイルと扱われてしまうからです。

こういうときはアプリケーションメニューの「開く」でファイルを選択するときに「Shift + Command + . (ドット)」を入力してみましょう。これで隠しファイルも表示されるようになるので「ホームディレクトリ」の下の .zshrc ファイルを選びましょう。

こうやってファイルを開いたら、先ほどの見本の内容を貼り付けます。

そのあとはターミナルを再起動すれば設定が反映されます。

または次のコマンドを入力すれば再起動しなくても反映されます。

% source ~/.zshrc

これで設定は完了です。

試しに man zsh と入力してから(Enter を押さずに) Tab を打ってみてください。

% man zsh
zsh          zshcompctl   zshcontrib   zshmodules   zshoptions
zshall       zshbuiltins  zshcompsys   zshexpn      zshzftpsys
zshcalsys    zshcompwid   zshmisc      zshparam     zshzle

zsh の man ページが補完されたでしょうか。こんなふうに zsh は Tab で何でも補完できるので、どんどん Tab を打って試してみてください。

最後に

これで zsh の導入は完了です。

zsh を使うと大量のファイルを一気にコピーするなど、GUI では難しい一括操作ができるようになります。この記事を参考にしてぜひ zsh を使ってみてください。

俺聞け4で zsh について発表した

2013/02/16に俺聞け4が開かれた。ウェブに関連する内容を発表したり聞いたりするイベントだ。

発表のテーマは何でもいいっぽいので、僕も zsh について発表した。

発表内容

その時の発表資料はこちら。

zsh を使おう

シェルがテーマなのでテキストファイル書いて vim で見せながら発表した。その中でシェルの操作とかあんまり慣れてない人向けに「シェルって便利なんだぜ」という感じを伝えた。

シェルはいろいろあって好きなもの使えばいいんだけど、その中でも僕は zsh をおすすめしたい。zsh はすごく高機能なんだけど、決して「高機能だから上級者向け」というわけではない。もちろん慣れた人は色々凝った使い方もできるんだけど、高機能な分初心者でもすぐに便利に使えるようになっている。なので初心者こそ zsh を使ったほうが良いと思ってる。

実際に zsh を使うには

設定ファイルの例をいくつか作った。

これを $HOME/.zshrc にコピペすれば OK。上にあるやつほど量が少なくてわかりやすいと思う。

あと、zsh を全然使ったことない人は起動とかどうやって使えばいいかよく分からないと思う。そういう人向けに Mac で zsh を使い始めるための記事を書く予定。書いたらここで紹介するのでまた見てほしい。

2013/02/22 追記

zsh を使い始めるための記事を書いた。 -> 「初めて Mac で zsh を使う人のためのチュートリアル」

この発表をきっかけに zsh を使う人が増えてくれると嬉しい。

感想

俺聞けは3回目ぐらいの参加になるけど、今回も興味深い発表が多かった。発表した人のレポート、参加者の感想なんかは @msng さんのページにまとまってる。

【開催レポート】『俺聞け4』を開催しました #orekike - 頭ん中

その中でも僕が特に気になったのが以下。

2500本の記事から考えた「ウケるタイトル」の考え方 (chaka さん)

タイトルでモテたい。

電子書籍並みの早さで紙の本が出せるサービス「MyISBN」 (Yukihiro さん)

MyISBN を使うと速く安く紙の本が作れる。すごい。

こういう何でもありな勉強会は自分が興味を持っていることが何でも話せるし、普通は聞けないような珍しい話も聞けるのでうれしい。テーマを絞った勉強会も大事だけど、この手の何でもありなやつは意外と少ないのでこれからも続けて欲しいと思う。

そして何より、勉強会を開催してくれる主催者、スタッフのみなさんにお礼を言いたい。

僕は発表するのは好きだけどイベントを開催するのはあんまり得意じゃないので、自分で勉強会を開くのは難しい。こうやって発表、交流の場を作ってくれる方には本当に感謝しています。

主催の @msng さん、スタッフの皆さん、参加者の皆さん、ありがとうございました。