「Rust Web Programming」を読んだ

shishi.hatenablog.jp

に続くRust学習録。

"rust web programming book" みたいな感じで適当にぐぐると真っ先に出る候補で、他と比較してもと2021年出版と新しく、目次は好感触だったので買ってみるも、自分にはこの本で学習した甲斐がないなと感じた本でした。

現実とは乖離しすぎた方法で実装を進めていくので、「web開発とはこういうものだ」と学んでしまったらもうそれはむしろ害悪になってしまう内容になっています。Reactなどはオーバーキルだから使わないと説明されていましたが、だからと言ってその結果が {{BASE_CSS}} などと <head> に書いてそこに別ファイルのCSSを読んでその内容で置換してHTMLを出力するというところまで戻るのはやりすぎで、せめて既存のテンプレートエンジンを使うほうが読者の利益になったと思います。 その他、JSの実装についても簡単な実装ではなく間違った実装に見え、十分な経験を積んだ人のものとは思えず、本書筆者の知識と経験に疑いを持ってしまいました。

また、typoが多く、中には引数の型があってないものまであり、本当にRustで動かしてやっていたのか?となってしまいました。なお、資料として公開されているgithubソースコードと本もまた乖離していますが、githubの資料はちゃんと動きました。

その他、Dockerやデプロイまで解説されているのですが、どれも大変原始的かつ今覚えなくていいやり方に感じるものが散見されました。だいたいどこのchapterにも「複雑だから説明しない」とか、「これで十分」的なエクスキューズがあるのですが、この内容はそのエクスキューズでもってカバーするにも苦しいだろうと思います。

逆に良かったこととしては、とりあえずでも開発段階が一通り解説されていることです。プロジェクトの作成からJWTによる認証、データの永続化、デプロイまで解説されていることは良いことだと思いました。冒頭の通り、目次で見えたこの構成が気に入って買ったのですが、内容がこんなに残念に思うものだとは…

この本でいわゆるバックエンド的な学習をしてwasmで構築するフロントエンド的な方向の学習に移るつもりだったのですが、ちょっと納得できないので、各フレームワークの解説記事やチュートリアル、本などを探していて、もうちょっとバックエンドの学習をしようと思います。

さすがにまだまだ学習資料自体が少ないし、あってもよりRustが注目されているであろう分野であるwasmや低レイヤのものが多く、なんでもできると期待される反面のきつい部分だなと思っています。

休職明けなどにNotionからのワンタイムパスワードのメールが来ないときの対処

Notionからのワンタイムパスワードが記載されたメールが来ない

NotionにはGoogleなどのOpenID Connectを使ったログインと、SSOプロバイダ経由、あとベーシックなものとしてメールアドレスを入力してそのメールアドレスに対しワンタイムパスワード記載のメールを送信してもらってログインする方法がありますが、僕が休職明けでNotionの利用を再開しようとしたところ、いつまで経ってもそのメールが来ないということがありました。

僕のメールアドレスをもとのグループのメンバーに加えてもこの現象は起こり続けていたので、社内で相談してみたところ、休職明けの人にこの問題は良く起こっていたらしく、Notionに問い合わせで復活することが何度かあったということや、Notionのバウンスリストに入っていて届かないことがあったという有力情報を聞くことができました。

そこで、Notionのウェブサイトのフッターにあるmailtoから「休職明けでサスペンドしてたメールアドレスを復活させてNotionにログインしたいんだけどできないんだ。あなたのところのバウンスリストに入っててメール送信できないなら消してほしいな」っていう内容をちょっとビジネスっぽくした英語で送ってみると、素早く1時間程度で「確かにバウンスリストに入ってたので消したよ」って返ってきて、再試行したところ無事メールが来てログインすることができるようになりました。

休職明けや何かの事情でサスペンドしていたメールアドレスや、スパムの送信元として詐称や乗っ取りされたメールアドレスは同様の理由でログインできなくなっているかもしれません。

あまり頻繁に起こるケースでないので逆に残しておこうと思った情報でした。

「The Rust Programming Language 日本語版 (通称 the book)」を読んだ

shishi.hatenablog.jp

前記事で読んだ本から次のステップとして

doc.rust-jp.rs

Rust界隈ではthe bookと呼ばれている、入門書がウェブで無料公開されており、有志により翻訳された日本語版が存在するので、そちらを読みました。 思っていたよりも知りたかった知識が網羅的に得られ、

www.oreilly.com

この辺の本から得ようとしていた基礎知識はとりあえず得られたのではないかという感想を得ているので、基礎知識ステップはとりあえず完了としてより実践の知識を得るフェイズに移っていこうかなというところです。

有志によるボランティアなので、ありがちな翻訳の固さ、逐語翻訳された不自然さなどはありますが、些細な問題です。やはり英語が読めるほうとは言っても日本語とは理解の早さが違いますからね。ほぼ全てのコードを写経しました。ほぼ全てのコードが今も問題はありませんが、dyn キーワードの導入から日本語版の更新が追いついていないようで、そこだけは修正しないとコンパイルすることができないことがありました。コンパイルできないようなコード、日本語が理解できないようなところは、原著である英語版をのぞきにいくと差分が見られたり、原文を見てああなるほどと理解することもできるので、そのようにして読まれることをおすすめします。

やはり母国語で必要十分な学習ができるというのは布教に大きな影響があるものと思います。Rails Tutorialのような、大きなひとつのつながりではないので、そこまで読みやすいとは言いにくいですが、実際に書いて実行できることに配慮されたコードがあり、Rust Playgroundで気軽にコード片を実行もできるしで、Rust勉強したいというプログラマにはまず紹介したい教材です。

今までのところ自分がやってきたRustの学習フェイズをこの順番なら良かったなと思う順としては

tourofrust.com

doc.rust-jp.rs

shishi.hatenablog.jp

です。

次は

www.rust-lang.org

"Rust By Example" を挟んでコード片の実例知識をもうちょっと眺めたりこのページで学習できる内容を眺めた後、

www.packtpub.com

で自分のやりたいメイン部分のウェブに発展していきたいなと思います。

「実践Rustプログラミング入門」を読んだ

Rustを勉強しようと思い本を探しはじめたのがだいたい1年前、この本の出版されたころでした。なんやかんやあって積まれたこの本を読んだのは世間的にもRustの評価が高まってきた今頃となってしまい、もっとはやく知っておけば今ごろRustのスキルももっとついていたろうになあと思うばかりです。

本書はRustの入門書ということになっていますが、あまり親切な部類の入門書ではありませんでした。

入門書としてRustのコンセプトや簡単な言語仕様、コンパイラなどのインストール方法から解説されてはいますが、大変に広く浅く解説されているので、プログラミングに慣れた人でないと理解は難しいかと思いました。広く解説しているため、多くのバックグラウンド知識がないとコンテキストが理解できず、Rustの理解とコンテキストの理解を同時に行わなければならない範囲が多いためです。実践中にコードの意図は説明されてもあまりコード自体の内容は説明されないので、Rustのリファレンスを見ながら見ていくようになります。丁寧に説明されたいという人には厳しいでしょう。

ただ、その分とりあえずRustでできることに触れてみたいという範囲は広くサポートされています。CLIアプリケーション、Webアプリケーション、WebAssembly、ローカルGUIアプリケーション、組み込みプログラミングとRustを使ってやりたいと思われる活用範囲に一通り触れていると思います。

発売されて1年ほどですが、エラッタにも載ってない内容で記載コードが実行不能だったり、誤字があったりします。エラッタページにあるソースコードを見ればわかりますが外部ライブラリに関するものだったりもしましたので難しいところです。 cargo add xxx だけでなく全てバージョンは書いておいたほうが良かったように思われます。

実例としては、Section5で本の説明通りにするとpanic が発生してアプリケーションが実行できなくなるこのような問題が発生したりします。

stackoverflow.com

僕のバックグラウンド的な問題があったと思いますが、WebAssemblyとunsafeに関する説明は特に理解が難しかったです。今後の実践から理解を深めていきたいと思いました。

意外にも自分のバックグラウンドでは本格的に扱ったことはない組み込みプログラミング、マクロの解説は分かりやすかったです。他にもおもしろかった部分としてはWebアプリケションの章ではデプロイするための実用的なdockerイメージの作り方が説明されたり、cargo周辺ツールの紹介、 FFIによる多言語連携の実例、最後にはRustで仕事をするための説得法まで、Rustの入門書とはいったい…という感想を持ってしまいました。

ちょっととまどってしまう本書ではありますが広く触れさせてもらえたことで私はRustに大変興味をもちましたし、とりあえずはもうちょっと詳しい言語仕様などを知ったり、もっと本格的なWebアプリケーション例を知りたく、

www.rust-lang.org

www.oreilly.com

www.packtpub.com

このあたりの本を読もうと思いました。

前者の本は前版の和訳があるのですが、Rustは数年ごとにエディションという区切りのアップデートがあるポリシーに追従できていないので、原著を追いたいところです。原著も2021年に予定されてるアップデートにどの程度追従できてるのかは読んでみないと分かりません。

これらでRustにより自信をつけたら、WebAssemblyなどにより詳しくなって、自身の得意領域のwebでRustをもっと活かせるようになりたいですね。

「プログラミングElixir」を読んだ

プログラミングElixir第2版を翻訳者笹田さんから頂けました。ありがとうございます。

プログラミング Elixir(第2版)

プログラミング Elixir(第2版)

  • 作者:Thomas,Dave
  • 発売日: 2020/12/01
  • メディア: 単行本

ElixirについてはErlangVMを利用した言語であり、なんだかRubyインスパイアな部分があるらしい関数型言語であると何年も前に知ったものの特に学習はしていないという状態でした。

また、本書の原著者Dave ThomasはRubyの普及に大きな影響があったと語られるピッケル本の作者であるのみならず、まさに世界のレジェンドプログラマーRubyをメイン言語として愛用する自分としてはRubyの良さを広めた彼が次にお気に入りの言語としてElixirを挙げているのは結構気になっていました。 さらにタイムリーなことに弊社でもElixirの機運が上がっており、まさに渡りに船というタイミングでいただけることになったのでした。

まず、本書はElixir習得のための総合的な入門書です。某所ではよくこういう書籍に関して「プログラマ初心者にとっての本ではない」というレビューがつくことがありますが、本書もプログラミング初心者のための本ではありません。プログラミング的な知見をある程度備えたElixir初心者、もしくは学習済みの人が知識を総ざらいするための本です。

序盤はまずElixirのもつ型や構造体の説明ののち、関数型言語の特徴的な扱いというか、考え方について解説が割かれます。パターンマッチに始まり、例えば、本書で whileloop といった代表的な繰り返し制御構造を見ることはありません。その代わり何度も再帰を使う場面に出会います。Rubyやその他いわゆるオブジェクト指向言語では再帰を使えてもあまり積極的に使う場面は少ないと思うのですが、Elixirではこういう風にするとクールだというふうに聞こえるぐらい再帰を使います。パターンマッチと再帰になじんでくると、なんだか関数型言語っぽい書き方ができるようになってきたなという感じになります。リストの扱いもオブジェクト指向言語たちでは見かけないやり方なので、Emacs LispCommon Lispになじんでなければリストの扱いにはもう少し苦労したかもしれません。

中盤になると、組み込みの依存管理ツール兼プロジェクト管理ツールである mixGithubと連携する使ったちょっとしたCLIツールを作ってみる章に入ります。近時のプログラミング言語にはこのようなツールの扱いは必須で、とても実用的と思いました。テストの書き方にもちゃんと振られており、実際に全部写経しましたが手にElixirをなじませるに良い教材となってくれたと感じます。新規プロジェクト作成、テストも何も言わずに最初からセットアップされており、依存性管理もビルトイン。このスムーズさはやはり新しい言語ならではという感じがありました。

その後、より本格的と言うか、ElixirとErlangのパワーを知れる内容に移っていきます。最近の言語が備えていなければならない安全に並行プログラミングを実行する機能、OTPサーバー、スーパーバイザ、タスク機能といった具合です。どれも入門書にある内容と思えないほどしっかりと解説がされており、コード量もしっかりしているので全部写経することは時間的な都合でできませんでしたが、辿れる考え方はもちろん規模や方法の違いはあれど、実世界の問題にも十分に適用できそうです。スーパーバイザとクロージャでもっていた値を新しくデプロイしたアプリケーションに引き継がせる例はこれがこのコンテナ時代より前にもっと知られていれば…と思わせる大変おもしろい体験でした。

終盤は高度な機能としてマクロやビヘイビア、プロトコルについて説明されます。マクロはともかくとして、プロトコルは実世界上のプログラミングでよくお世話になる予感があります。Javaでいうところのインターフェイスに近いものと理解しました。

要所に要所に演習問題がありますが、本を通してみると結構な量があります。すぐ解けるようなものばかりではなく、結構考え込んだりもします。ちなみに答えは用意されていないので、どうしてもわからない場合はGithubで探すことになります…僕は探しました。 演習問題と合わせて写経しながら本書はそのコード量と合わせて相当なボリュームとなります。

本書の最初に 「赤いカプセルをとれ」"Take the red pill" という映画マトリクスの名言が出てきますが、今だこういう世界観に対するあこがれのある自分としては最初に本書に引き込まれるきっかけとなってくれました。大変ずるくて効果的ですね。あと本書は全編に渡りカラーでした。紙の本を久しぶりに読んだこともあり、新鮮で驚きました。

本書を読了した今、さらにElixirのウェブフレームワークであるPhoenixに入門してウェブ開発への知見を深めていくか最近噂のIoT用フレームワークNervesを学んでいくか、うずうずしているところです。

そういえば何度か会社に入ったり出たりしました

ジョブホッパーな僕だけど、今何の仕事してるよって言ってた記事は

shishi.hatenablog.jp

が最後だった。およそ3年も前の記事である。当然仕事も変わる。

前回記事から現在まで

  • フリーランスとしての職は別にずっと継続

    • まあこれはやめたっていうまでいつまでも名乗れるので継続とかどうとか言う問題ではないかも知れない
  • 前々職

    • タケユーウェブ
  • 前職
    • Kabuk Style
  • 現職
    • ???

タケユーウェブ

いわゆる小規模SIer。以前からの友人であった竹内さんが立派な志を持って始められた会社。社員4,5人ながら色々と細やかに気を使っていただき短い期間ではあったが楽しい経験だった。以前からフルリモートワークで働いてはいたが、そういえばここが初めての「会社として全体をフルリモートワークとする」を選択していた会社だった。

ここを辞めることになった理由はちょっといろいろありすぎてインターネット上では書けない。たぶんこんなふうに仕事をやめるのはジョブホッパーの自分でもこれ一回きりだと思う。

KabuK Style

HafH というサービスを提供している会社。友人の紹介でつなげていただいたベンチャー

既にエンジニアは数人いたものの、ドメインやメールサーバーの管理がどうなっているかなどを誰も把握しておらず、ドメインが失効するところだったのを食い止めて整理したり、10年ぶりは固いレンサバ触ってGCPに持っていったり、ほっとくだけで爆発することが見えていたDB構造の再設計、それに伴うアプリケーション全体の再設計、AWSからGCPへの移行など、思い出すだけでめまぐるしい日々を過ごした。死ぬほど働いたが、別にそれが辞めることになった理由ではない。自分が納得したハードワークはどんとこいである。

現職

まだ試用期間中なので秘密。ブログに転職したと書くのにあえて一定期間秘密にするのを友人たちがやっているのを見て僕もやってみたかった。またこの記事と同じ様にいつか思い出した頃に書くと思う。

今言えることは、変わらずフルリモートワークであるが、普通にみんな同じ日の、同じような時間に働く普通のことを期待されるのが何年ぶりなんだっていうぐらい久しぶりなので、そういう働き方に普通に頭と体がついてこない。いつのまにか一般社会に適応できてない体になった…

「それが僕には楽しかったから」を読んだ

何がきっかけかは忘れてしまったけど、そういえば読んだことない本なので読みました。古い本なので電子書籍化はされておらず、久しぶりに紙の本を買うことになりました。寝る前に横になって本を読むのが習慣化しているのですが紙の本だと照明がないと読めないという当然の事実の前になかなか読書が進まなかったので旅先で籠もって一気読みしました。

自分の知る限りは最初のそして唯一のLinuxを生み出したLinus Torvaldsの自伝です。

内容として語られていることはこの本が古いこともあり、既にLinusの人となりとして知っていたエピソードが多いので、あまり特別に新しい発見ということは少なかったのですが、やはりプログラミングが楽しいという点でつながるLinusと自分というだけで、こんなに同じ感性があるのだと思うと楽しいものがありました。金をもらうのは嬉しいが、もっと優先したいものはあるし、ただ面倒だとかそういう理由で世の中ではすごく大事そうなことを避けることもあるみたいな… 原題は "Just for fun" ですが、原題も、邦題も良いと思います。ただ楽しいからやってただけなんだということは何度もLinusの振り返りとして書かれています。与えた社会的インパクトには大きな違いがありますが、自分にもその気持ちは理解できます。

プログラマーというか、プログラミングが好きな人には不思議とこういう感性が共通する人が多いように思います。そしてそのような感性はいわゆるプログラマーではない人たちからすると理解しにくいものであることが多いようです。なので、世界一有名なプログラマーといっても過言ではないLinusからプログラマーとはこんな特性があることが多いということをわかってもらうために、プログラマーでない人に読んでもらうと面白いかもしれないと思いました。