Part34:総仕上げ

海未「では前回のechoサーバを、TCP経由でコマンドを受け取ってKVアプリケーションを制御できるように拡張してみましょう」
凛「いよいよ大詰めって感じにゃ」

海未「”CREATE card1″のような文字列を受信するとcard1というbucketを作成する、といった形で一通りの機能がネットワーク越しに使えるようにしましょう」
希「いよいよ外部向けAPIを作るんやね」
海未「kv_server/lib/kv_server/command.exを作成します」

海未「まだ、実際にKV本体にアクセスはしないようにしています。このコードはモックですね」

海未「次にkv_server.exを修正して。コマンドを受信できるようにしましょう」

海未「主にserve関数を拡張しています。ソケットから読み出した内容を解析して、認識できる形式であればrun関数に渡して実行させています。・・・といっても、そのrunはまだモックですが」

海未「では、サーバを起動してtelnetで動きを見てみましょう」

海未「形式に従ったコマンドであればとりあえずOKが、そうでなければUNKNOWN COMMANDが返ってくることが確認できると思います」
希「動いたのはええんやけど・・・このコード、もうちょいどうにかならへん?」

凛「この行数ならまだ読めるけど、条件増えてきたらきついにゃ~」
海未「たしかに、あまり読みやすいとは言えないですね。では、こうしてみましょう」

海未「まずmix.exsに依存関係の定義を追加します」

海未「これを使うと、serveのコードは・・・」

海未「こう書けます」
凛「おおっ!」
希「パイプ演算子が使えるんか。ソケットから読んだデータをparseしてrunして、って分かりやすいな」
海未(どやっ)
凛「世の中にはすごいライブラリ作る人もいるもんだにゃ」
希「これだけ拡張性に優れたElixirや、考えるより探す方が早いんかもね」
凛「海未ちゃん、なんでちょっと寂しそうな顔してるの?」
海未「・・・いえ、気にするには及びません。では最後に、実際にKVアプリケーションにアクセスするようにrunを実装しましょう」

海未「Bucketがなかった場合にNOT FOUNDと表示するように、kv_server.exも直しておきます」

海未「マルチバイト文字は扱えないのでスコアマッチっぽくはならないですが・・・汎用キーバリューストアとして動作するはずです」

海未「・・・この通り」
凛「海未ちゃん、自虐的すぎるにゃ・・・」

海未「ともあれ、これで完成です!」
凛「34回、長かったにゃ~!」
希「にこっちたちのPythonの倍やった計算やね」
海未「まあ、向こうは言語仕様に留めているようですから・・・」
凛「次回からどうするの?」
希「何かネタがあり次第、とかでええんちゃう?」
海未「そうですね。入門と呼べる範囲は一通りやったと思いますから、ここで一区切り入れましょうか」
希「というわけでお相手は、東條希と」
凛「星空凛とっ」
海未「そ、園田海未、でした・・・って、誰に言っているのですか!?」
凛「次のユニットシングルもよろしくにゃ~っ!」


LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です