みずりゅの自由帳

主に参加したイベントやソフトウェア技術/開発について記録しています

Elixirの技術同人誌を3冊頒布した話

本投稿は『fukuoka.ex Elixir/Phoenix Advent Calendar 2020』の記念すべき1日目の記事です。

なお、fukuoka.ex Elixir/Phoenix Advent Calendar 2020 については、こちらを参照。

qiita.com

さて、記念すべき1日目に何を書こうとか悩みました。
そんな中、自分の強み/特徴としては、「"Elixirに関しての技術同人誌を3冊出している"」があるなと気づきました。
せっかくなので、今回はその点を書いていきます。


余談ですが、2020年12月1日には、書籍『プログラミングElixir(第2版)』がオーム社から出版されます。
そんな日に同人誌とはいえ書籍の話をするのは、ちょっとした運命を感じています(笑

www.ohmsha.co.jp

Elixirとの出会い

仕事でRubyを使っていた関係で、とある地方Rubyコミュニティのイベントに参加しました。
その際に、Rubyの文法に似た関数型言語Elixirを紹介してくださっていた方*1が居て、そこでElixir を知りました。

その後、Ruby以外のプログラミング言語の手持ち武器が欲しかったので、並行処理に強いと言われていたGoとElixirを趣味で細々と触りつつ関連イベントに参加していくという日々を送っていました。

Elixirの技術同人誌を書こうと思ったきっかけ

もともと、アウトプットの一環として技術同人誌の合同誌に寄稿をいくつかしていました。
ただし、それらはプログラミング寄りのものではなありませんでした。
ですので、「いつかはプログラミングを扱った単著の技術同人誌を書こう」と考えていました。

そんなモヤモヤを抱えたまま、2019年6月に開催された『Erlang & Elixir Fest 2019』に参加。

elixir-fest.jp

そこで紹介されていた「Phoenix LiveView*2と『Nerves*3に感銘と衝撃を受けました。

これはクルぞ!

そう思い、Phoenix LiveView や Nerves についての情報を調べてみました。
すると、QiitaなどWeb記事には情報はあるものの、書籍としては出ていない様子でした。

単著として出すならこれかもしれない...

その思いが芽生えた瞬間、矢も盾もたまらず、同人誌の執筆をはじめていました。

これが、のちに「えりいざ本」として認知していただく、Elixirの技術同人誌を書き始めたきっかけです。

頒布した技術同人誌について

ブログのタイトルにもある通り、Elixirの技術同人誌を3冊作っています。

本のタイトルは『Elixirへのいざない』(略称:えりいざ本)です。
「一緒にElixirをやりませんか」という想いを込めて「誘い(いざない)」とつけました。

各々について簡単に説明します。

1冊目:Phoenix LiveviewとNervesをさわるElixirへのいざない

技術書典7*4で頒布した、1冊目のElixirの技術同人誌です。

技術書典の参加者に「Phoenix Liveview」と「Nerves」を知ってもらいたかったので、長くなるにもかからわずタイトルにフレームワーク名を含めました。

構想時点では、この2大フレームワークの内容だけで良いかと考えていました。
しかし、『Elixirをまだ知らない/さわっていない人たちにも届けるには、これだけだと敷居が高いかな』と感じました。
そのため、インストール方法/mixの使い方/Phoenixとは何か、と言った内容も本に追加しました。
その甲斐もあり、買っていただけた方には「初心者にもわかりやすい」との評価もいただきました。

想定外だったのは、自分よりもElixir歴が長い人に買っていただいたケースが多かったことです。

また、この本をきっかけに、fukuoka.exをはじめとしたElixirコミュニティの方々と交流がもてるようになりました。
Erlang & Elixir Fest 2019」で登壇/LTをされていた方々と知り合えたのは、本を書いて本当に良かったなと思えた瞬間でした。

ちなみに、技術書典7への頒布については、こんな記事を書いています。

技術書典7でElixir本「PhoenixLiveViewとNervesをさわるElixirへのいざない」を頒布します。 - みずりゅの自由帳

余談:商業誌版のElixirへのいざない

余談ですが、この本を底本にした商業誌がインプレスR&Dで出版されています。
同人誌版ではPhoenix1.4/Nerves1.5でしたが、商業誌向けにPhoenix1.5/Nerves1.6に改訂してあります。*5

興味があればご覧いただけると幸いです。

nextpublishing.jp

2冊目:Elixirへのいざない2 〜もっとNervesをさわる〜

技術書典8 (正確には技術書典応援祭)*6で頒布した、2冊目のElixirの技術同人誌です。

タイトルが短くなりました。(笑

最初の本を書いた際に、Phoenix LiveViewのバージョンアップ追随に苦労させられました。(このPhoenix1.4ベースでのLiveViewはベータ版的な位置付けでしたので、とにかく破壊的変更が多かった)
ですので、比較的更新が緩やかだったNervesにターゲットを絞りました。

もともと、最初の本ではNervesを利用するまでの環境面の準備情報(SDカードやカードリーダーなどの情報)に力を入れていたので、ラズパイ付属のLEDをLチカするまでしか触れていませんでした。
しかし、「IoTフレームワークとして知ってもらいなら、電子回路との接続は必須だろう」との思いがあり、Nervesに特化したものにすることにしました。
とはいうものの、Nervesのアプリを作るには当然Elixirの知識が必要になります。
そこで、この本でも簡単なElixirの文法や構文に加えて、自動実行の肝でもあるGenServerの特性やその利用方法も記載しておきました。

さて、Nervesにターゲットを絞って安泰、となれば良かったのですがそうは問屋が卸しません。
NervesのバージョンアップやErlangバージョンアップへの追随にともない、Elixirのバージョン指定が日に日にシビアになってきました。執筆時点では本家のサンプルも古いバージョンでの書き方であったので、そのギャップを埋めるのに苦労しました。
ただ、そのおかげてそれぞれの記述がどんな意味を持っているのかの理解が進みました。

3冊目:錬金術師見習いエリィと歩むたのしいElixir 〜Elixirへのいざない外伝〜

技術書典9*7で頒布した、3冊目のElixirの技術同人誌です。

長いタイトルが復活しました(笑

フレームワークである「Phoenix LiveVIew」と「Nerves」からは離れ*8、素のElixirに関しての本を書こうと思いました。

どんな内容がいいか考えた際に、「初心者から中級者へなるために知っておいた方が良いこと」なら需要があるかな、と思いつきました。

しかし、そのまままとめたとしても面白くありません。
そもそもこれらの内容は、書籍としては良書「プログラミングElixir」がありますし、Webコンテンツとしては「ElixirSchool」があります。加えて、fukuoka.exをはじめとした地域Elixirコミュニティの方々がQiitaで優良な情報を発信されています。

それらとの区別化のためには何が必要か。
悩んだ末に、会話形式調で記載することにしました。
ただ文章で説明するよりも冗長にはなりますが伝わりやすいかなと考えたからです。
有識者に教えてもらいながら、初心者が中級者を目指す」とすることで、ターゲット読者層に興味を持ってもらえるように工夫してみました。

そんなこんなで生まれたのが、この本となります。

扱った題材は、IEx Tips/命名規則/末尾再帰/並行プログラミング/マクロです。
特に苦労したのは、並行プログラミングとマクロについてです。
内容の理解もさることながら、どこまでの情報を載せれば中級者と言えるかを整理し、加えて会話形式に落とし込むのに執筆時間の2/3をとられました。
本家マニュアル/ElixirSchool/プログラミングElixir/ElixirのQiitaや企業ブログ・個人ブログ、を何度も何度も見返して、自分の言葉でできるように咀嚼して、伝わりやすいように意識して書きました。

もともとはOTPやビヘイビアまで記述する予定だったのですが、締め切りまでの時間が足りずに断念。
ただ、機会をみつけて追記した改定版を出していけたらなぁ、とはぼんやりと考えています。

まとめ

簡単ではありますが、自分がElixirの技術同人誌3冊を頒布した話を書いてみました。
テクニカルな内容ではなくて恐縮ではありますが、こんな形でElixirのコミュニティに貢献しようとしている人間もいるということでご勘弁を。

本という形にするためにインプットを行い、インプットを咀嚼して、アウトプットで本という形にする。
正直なところ、コストパフォーマンスはあまり良くないでしょう。
では、なぜこんなに苦労しても技術同人誌を書いたのか、と聞かれたら"好きだから頑張れた"というのがあります。
それは、執筆活動が好きでもあり、そしてElixirが好き、というものです。

技術同人誌を通じてElixirを知ってもらい、好きになってもらい、一緒にElixir関連の活動していく。
そんな未来の可能性を想像しながら、Elixirの技術同人誌を執筆しました。

さて、私のElixir愛を語ったところで、アドベントカレンダー1日目の記事を終了させていただきます。

2日目は、marocchinoさんの「優しいエラーメッセージを書きたい」の予定です。
ご期待ください。

*1:今考えると、「プログラミングElixir」の紹介もされていたので、もしかしたら笹田さんか鳥井さんだったのかもしれない

*2:https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html

*3:https://hexdocs.pm/nerves/getting-started.html#content

*4:2019年9月開催

*5:このバージョンアップ対応が、ものすごく大変でした

*6:2020年3月開催

*7:2020年9月開催

*8:バージョンアップ追随にちょっと疲れた、というのもあります。