技術書典7で昔の自分みたいなプログラミング初心者に向けたプログラミング以外のIT技術をある程度まとめた入門書を出していました
このエントリは、懲りずに技術書典7に出典し「実行環境ランタイムパッケージ」という本を出していたのでその内容のご紹介と当時の様子の記録を残すエントリです。
新刊について
誰のための本なの?
すでに6年ほどプログラミング関係のブログを書いてきてなんですが、わたしはプログラミングが苦手です。しかし、昔はもっともっと苦手でした。
たとえば、C言語のコンパイルやリンカがどうしてもよくわからずgccでコンパイルして動かしながら実装していくのをあきらめ、シャーペンで紙の上にプログラミングしていたり。
その後、phpやJavaScriptに出会い、プログラムを書けば動くならやれそう!とコンピュータ上でプログラムを書くようになりました。
が、初めてインターンに行ってgemやBundlerに出会ったとき、「なんか知らない人がいっぱい出てきたな…?」とめちゃくちゃ焦ったり。
プログラミングどころか、それ以前のところでずいぶんプログラミングについて焦ったり諦めたりしてきました。
そういう昔の自分みたいな人やそういった人にプログラミングを教える人を主な対象としています。
どういう本なの?
というわけで、本書はプログラムを実行する前に必要となるプログラムを書くこと以外の部分についてある程度まとめた各種チュートリアルなどの副読本となります。
プログラミング初心者がもやもやしがちな「実行環境」に関連する話題を扱っています
さて、そういう昔の自分みたいなプログラミングの初心者がつまずくプログラミング以前のポイントといえばプログラミングの実行環境の構築ではないでしょうか。
というわけで、この本ではプログラムを実行するために必要な要素を扱うことにしました。
まず、プログラムを実行するためにはプログラムをコンピュータが扱える形に直したり、開発者が書いたプログラムを解釈・実行するプログラムが必要です。
また、我々が書いたプログラムはそれだけで動くわけではなく、他人の書いたプログラムをまとめたライブラリを揃えたり、設定ファイルやデータベースなどに入ったデータを必要とすることも多いでしょう。
ということで、他にもこうした実行環境を構成する要素はあるでしょうが(たとえばIDEやOSとか)、本書では上記の範囲に関連する話題を扱うことにします。
ふいんき把握用にかんたんなコード例は多少ありますが、背景知識が中心です
自分自身の経験からチュートリアルや既にあるドキュメントによってコマンド自体はわかっても、そのコマンドがどういったことをしているかわからず不安になることが多かったです。
そこで、本書ではそういった背景知識となるような部分を説明していくことにしました。
そのため、実行環境に関連する話題を扱うといいつつ、ツールの細かいコマンドの一覧やオプションについては扱っていません。そうした具体的な構築手順は各ツールのドキュメントやチュートリアルに任せることにしています。
雰囲気をつかめる程度のかんたんなコード例はある程度載せていますが、 「コマンドは書いてあるのを叩けばいいんだろうけど、こうしたツールがどういうことをしているのかわからずもやもやする」 という人のための本です。
ところで、ランタイムパッケージ(Run-Time Package, RTP)という言葉を知っていますか?
主にGUIでプログラムを組んでいくツール*1で用意されることがある、そのツールで作成したプログラムを動かすのに必要となるライブラリやデータをまとめたものです。
割と、というのはプログラムの利用者や開発者が自力で相当するファイル群を用意すれば*2いらないこともあります。
そういう、開発者本人が組んでいくプログラム本体ではない、共通して多くのプロジェクトで利用されることが想定される付属的な部分をRTPと呼ぶ界隈があるわけです*3。
本書で扱う内容も、ツールそのものではないし、知らなくても問題ないものの、いろんなプロジェクトで共通して使えるようなトピックをまとめているのでタイトルにランタイムパッケージとつけています。
具体的な内容について
さて、
- プログラミング初心者がもやもやしがちな「実行環境」に関連する話題を
- 雰囲気把握用にかんたんなコード例は多少あるものの、背景知識中心で扱う
本といったものの、具体的にどういうことかわかりにくいと思います。ですので、章ごとにもう少し具体的な内容をご紹介します。
1章 プログラムのソースコードを変換して実行するための「言語処理系」
もし、
という経験があるのであれば、1章がぐっとくると思います。
1章はプログラムをソースコードの状態から実行できる状態まで持っていったり、ソースコードを解釈して実行したりする言語処理系のお話です。
C言語の Hello, World
をコンパイルしたときに実行可能な状態で機械語が入ったファイル(いわゆるWindowsにおけるexeファイル)が生成されるまでの流れを以下のように図を交えながら、1ステップずつ解説していきます。
#技術書典 新刊1章は、C言語のソースコードをコンパイルして動かすまでをときには下図のように図を交えながら少しずつ説明!
— woshidan@技書博/技術書典7 か29C ネットワークスクランブル/あの素晴らしいCGIから… (@woshidano) September 21, 2019
・学校でC言語やるけど、コード書く以外の部分がよくわからない
・インタープリタとコンパイラって何が違うの?
という方におすすめの章です https://t.co/UCbjmZhrdf pic.twitter.com/dl66BRR7ng
その後、JavaやRubyのコンパイラやインタープリタの話にふれることで、コンパイルとインタープリトの意味をもう少しつかめるようになっています。
2章 必要なライブラリを揃えるためのツール
1章でこういう感じとして例にあげた Hello, World
より複雑なプログラムを書いていく場合、たくさんのライブラリが必要となるでしょう。
2章ではそういったライブラリを管理するためのパッケージマネジメントという機能を持ったツール(Rubyのライブラリのためのツールとしてはgem, Bundler)を扱います。
こうしたツール間では扱う領域や言語、出てきた領域によって差がありますが、いくつかのツールを見比べていくことで新しいツールを学ぶときのチェックの勘所がみえてくるかもしれません。
また、シェルにコマンドを打ち込んだときに実行されるために必要な「パスを通すこと」に関するコラムもご期待ください。
3章 処理対象のデータを用意する
プログラムはソースコードに書いた部分だけで動く場合もありますが、大抵の場合、プログラムの外側からデータを渡されて動くのではないでしょうか。
3章ではコマンド引数や設定ファイル、データベースサーバなど、プログラムが処理の対象とするデータを用意する方法についてかんたんに確認しておきましょう。
4章 言語処理系を動かしたりデータを置く「コンピュータ」の用意
ここまでで実行環境を構成する要素について3つほどお話してきましたが、いま特にWeb系の企業において実行環境を用意するツールといえばDockerですよね。
Dockerは隔離された実行環境を提供すると言われていますが、いったいどういうことでしょうか。
また、隔離された実行環境を用意するツールにはVirtualBoxなどの仮想化ソフトウェアを利用する方法もあるでしょう。
それらとDockerが実行環境を用意する仕組みはどう違うのでしょうか。
4章ではそのあたりがつかめるように、DockerやVirtualBoxなどコンピュータの他の部分から隔離された実行環境(作中では「コンピュータ」と「」をつけて表記)を用意する方法について確認していきます。
なお、電子版につきましては技術書典7で頒布した紙の書籍から参考文献の表記の整理と若干の訂正を行なっています。訂正箇所について詳しくは上記のエントリをご確認ください。
ということで、新刊の紹介はここまでで、次は当日の様子+αのお話をします。
当日の記録
ギリギリまで検証・校正をしていた結果、事前告知が前日の午後というどうしようもない感じで*4、200部刷って手に取っていただけたのは13部、新刊単体でみると「やぁやぁ我こそは正しい爆死であるぞ!」という戦績でした。
完成しただけで悔いはないくらい思い入れのある内容だったのでこれからもじわじわと推していくぞ、という感じです。
どちらかというと、当日出展準備の時間が想定の半分以下に縮んで頭が真っ白になったり宅急便の搬出が2階しかなくスタッフの方に助けていただいたのが申し訳なさでつらかったです。いい加減慣れてきましたし、次回からは持ち込み部数をもっときちんと調整することにします。
新刊は自業自得な結果としてややさみしい感じでしたが、既刊について手を取ってくださったり声をかけてくださる方がいらっしゃってありがたかったです。
ネットワークスクランブルシリーズの新刊はなかったにも関わらず「TCP編がいい本だった」とわざわざ伝えにきてくださったり、「シリーズの他の本を前買ったから持ってないものが欲しい」と訪ねてくださる方がいたり。「全部ください」という太っ腹な方もいらして、たいへん励みになりました。
また、ご近所のサークルの方が見に来てくださったのもとても嬉しかったです。自分がバタバタしすぎていてこちらからはご挨拶に行くことができず申し訳なかったのですが、すごく嬉しかったです。
そういえば、既刊のネットワークスクランブルシリーズですが、おかげさまでシリーズ累計650部を突破いたしました。
どういうシリーズかといいますと、細かく一つずつ刻んで話を進めていくことで、
- 光は遅いから光が通る距離を減らしたいよね
- ああ、暗号化ってなんかデータを読みにくくしているんでしょう
というあまり事前知識のないあたりから読み始めても安心でありつつ
など実は日本語では本シリーズくらいにしか載っていないような話題も散りばめられている、目指せ万人向けなさくっと読めるネットワークプロトコルの入門書です*5*6。
よろしければこの機会に弊サークルの特徴の一つ、なんとなく読めるタイプの目次だけでも覗いていってくださると嬉しいです!
それでは、次回技書博でも何卒よろしくお願いします。
*1:RPGツクールPC版各種, C++Builderなど。
*2:わかりやすい例がRPGツクールのRTPは全て自作素材だと不要
*3:ソースコードを書いていくいわゆる普通のプログラミング環境ではその種の定数やライブラリは言語仕様として定義されていたり、標準ライブラリや組み込みライブラリなどと呼ばれてRTPと呼ばれるものと違う形態で提供されることが多い印象
*4:この度、こういう正体不明な本の告知をきちんと書くと2日くらい余裕で溶けることが判明しました
*5:みんながもっとネットワークプロトコルの話をすればよいというロマンを追い求めてこその同人だと思っている!!!
*6:この特徴はネットワークスクランブルシリーズ以外でもそうで、たとえば今回の新刊だとレイヤーや言語を跨いでパッケージマネジメントの機能を持つツールやその周辺を体系化して説明しようという無茶をやっているのはこの本の2章くらいです(Javaだけに限れば掌田津耶乃著「Javaビルドツール入門 Maven/Gradle/SBT/Bazel対応」があります)。初心者安心と沼の楽しそうな部分が覗けることをなんとかして両立させていきたい。