
2025.03.19
ドバイ不動産投資の最前線 専門家が語る、3つの投資モデルと市場の展望
ポイントで導入するRust(全1記事)
リンクをコピー
記事をブックマーク
tommy氏:よろしくお願いします。Fablicという会社で働いてたんですけど……7月から吸収合併により楽天社員として働いています。よろしくお願いします。たぶん今日のメンバーの中では1番ライトなトークだと思うので、リラックスして聞いていただければと思います。
僕がなんでRustを使おうと思ったかという話なんですが、この『達人プログラマー』に、「毎年1つの言語を学習する」っていうことが書いてあって。
なるほど、と。僕が当時まともに使ったことのある言語ってこんな感じだったんですけど、「新しいことがしたい!」と思って。
GoとRustをぼんやり検討したんですが、「Goならこの先仕事でふつうに使うんじゃないか」と。……ホントかわかりませんが、思いました。
(会場笑)
時代はRustだ、ということでRustを勉強し始めました。
まず「Rustを使う準備」ですね。準備とはなんぞや、ということなんですけど……。みなさんこのページ見覚えがあると思います。
これを読みながらやっていたんですが、「フムフムなるほど……」以上の感想が出てこなくて。「僕が作りたかったものは動くものだ」ということで、2chのまとめサイトをRustで作ってみました。最近ワールドカップがあったので、自分的には活躍していたんですけど。
やっていることはものすごく単純で、xmlを取ってきてDBに保存して、それをJSONで出力するという。ふだんやっているのですごくイメージできる……Webサービスをどう作ればいいかのイメージはすでに僕の中にあるので、新しい言語を勉強するところで「これを実現するためにはRustではどうすればいいのか」という視点で考えることができて、けっこう勉強にはよかったかなと思います。
そして、これが僕がそのWebサーバーとして使ったRustのライブラリですね。
実装を意識すればいいだけのライブラリは、Rustでは既に用意されています。ですので、僕がやることは、僕が実現したいことを素直にやっていくこと。そうすると、Webサービスと言うか……JSONを返すくらいのWebサーバーなら簡単に作ることができます。便利です。
「Rust導入のきっかけ」ですね。これまでは趣味のアレなので、業務でどうやって使ったかということなんですが。
僕は今、ラクマというサービスを開発しているんですが、僕がジョインした当時、チームの人数が大きく変わり始めていました。業務の自動化の機運が高くなってきてたんですね。
その1つとして、弊社はRubyを主に採用していて、マイクロサービスみたいな感じで、アプリケーションが複数分かれています。アプリケーションから共通で呼ばれる、社内で使うgemみたいなものを作っていて、こういうフローで自動化をしました。
ここで、Herokuに乗せたときに問題が発生しました。もともとローカルのマシンでRubyを実行してGitHubのタグを切っていたんですけど、これHerokuで都度デプロイするようになると、bundle installに2分くらいかかって、「自動化の意味ねぇ」という状態に陥りました。
ここで社内のSlackでなぜ遅いのかという理由を説明してたら、ある人から「node.jsで書き直す・Rustで書き直す・goで書き直す」みたいな提案があって。なるほどね、と。
(会場笑)
僕がこの作業をやっているとき、つまりcircle CIが回ってる間完全に遊んでいたので、別の言語でやろっかな、と。でもRustを導入しても、みんなわからないしどうしましょうか、みたいな。ここで、「僕が例外をキャッチしてレスキューするモデルであれば可能なんじゃないか」ということで、改めてRustの機運が高まります。
(会場笑)
次に、「運用とその後」ですね。無事Rustでスクリプトを組んで、バイナリを用意してあげて、Heroku上で実行したことで早くなりました。みんなけっこう気付いてくれて、無事、当初チームで問題としていたものもRustで解決することができました。
しかし、当然運用していると、問題が発生しました。なにかが動いていない。でも、みんなRustを知らないのでぜんぜんわからない。「ぜんぜんわからん。でも雰囲気ですらすら読めます」みたいな。
(会場笑)
ここで、僕の会社でもRustを書ける人が僕しかいないということが問題になる……かと思ってたんですけど、みんなわりと、短いスクリプトだったらすらすら読んでくれました。「だいたいあってる」。「ぜんぜんわからんけどこれでいいですか」っていうプルリクが飛んできて……。
(会場笑)
「完璧です」と。
(会場笑)
本番で動いてるとはいえデプロイスクリプトの一端で、間違っても潰しが効くっていうことで、わりとみんな積極的にやってくれました。これはもうチームメンバーにありがとうございます、っていう感じですね。
で、真の問題はクロスコンパイルで。
参加者:この絵文字ヤバいっスね……(笑)。
tommy:そっすね(笑)。
(会場笑)
滅多にいじらないので、バイナリを作るとこは僕が手動でやっています。vagrantを立ててHerokuと同じ環境でコンパイルしました。チームで運用していくことを考えるとマストなので反省していますが、これ以降修正の機会がなくて、まだ着手してないという感じですね。
まとめです。Rustを業務で使ってみようかな、というときに僕がやったら良さそうだと思ったのは、自分が手を動かしてイメージができるもので練習すると便利かなと思います。僕の場合は簡素なWebサービスだったんですが、Rustはまだチュートリアルみたいなものも少ないので、そういうことは有効なんじゃないかと思います。
僕の場合は転職したばかりだったので、事業ドメインにあまり関係のないところをやらせてもらえるチャンスがありました。そんなときに、先ほどのWebサービスみたいなものを作ってGitHubで公開もしていて「Rust使えます」ってアピールしてたので、そういう機会があるたびに「Rust、いいんじゃない」みたいな支援をしてもらうことができました。
「不具合が起きたら自分に任せろ」というスタイルでやるのは、わりと新しいことをやるときはアリかなと思うんですが、その後のケアをするのもセットかなと思います。
あとは、「チームの懐の深さと新しい技術の導入に対する理解度」は僕にコントロールできるところではないので、改めてチームメンバーに感謝したいなと思います。
おまけで、エモかったので少しだけ、テストのTipsを。僕がちょっと「あれ?」と思ったことを共有します。
まず1個目、Rustのテストってデフォルトでマルチスレッドで実行されるんですよね。これがDBとか、同じファイルを書き換えるみたいなことは、単純にそういうテストとの相性悪いので。実質的にWebサービスでテストしようと思った場合、このオプション。test-threads=1として、そのままでいこうかなと思いました。
次。「Private methodのテストは同ファイル内に書く」。テストって、テストデータ書いたらもう十何行とかやったりするので、個人的には分けて書きたかったんですけど。「プライベートなメソッドにそのファイルからしかアクセスできない」というのは、言われてみれば1つの答えな気もしました。
あとは、行数が増えて見通しが悪くなったら設計を見直せ、ということかなと。言語仕様上でそういうところが考えられるかどうかということを思ったりしました。
次。Mocking LibraryのMockitoというライブラリがあるんですが、これがちょっと、僕が想像してたのと違っていたので共有します。仕様書読めば書いてあるんですが、ローカルマシン上でHTTPサーバーを裏で立ち上げてくれるっていうライブラリです。
コード内で指定しているURLでアクセスする先をMockitoで立ち上げたサーバーに向ける、みたいな感じで。PHPやRubyでふだん使っているモックみたいな仕組みとはまるで違うので、注意したほうがいいかなと思いました。
これですね。もともとのスクリプトってRubyで書いてあったんで、単純に置き換えたんで比較してみました、というのもあるので、よかったら見てみてください。
楽天で大企業の恩恵を享受しつつ、こういうアットホームな雰囲気のチームで働けるので、ぜひよろしくお願いします。
ご清聴ありがとうございました。
(会場拍手)
司会者:ありがとうございました。質問ある方いらっしゃいますか?
(会場挙手)
質問者:テストのところの、「プライベートメソッドだと分けられない」っていうやつなんですけど。プライベートのやつって、その下のモジュールの中からはアクセスできるから、ふつうに分離できるかなと思ったんですけど。
tommy:なるほど。今回作ったものが簡素すぎて、そんなに階層構造が複雑じゃなかったのでその検証ができてなかったです。
質問者:なるほど、わかりました。
tommy:ありがとうございます。
関連タグ:
2025.03.21
マネージャーの「自分でやったほうが早い」という行動で失うもの 効率・スピード重視の職場に足りていない考え方
2025.03.17
不確実な時代だからこそ「知らないこと」を武器にする ハーバード主席卒業生の逆説的なメッセージ
2025.03.17
いくら読書をしても「成長しない人」が見落としていること 10分でできる「正しい学び方」
2025.03.17
ソフトバンクとOpenAIにとって「歴史的な日」になった 孫正義氏が語る、AI革命の全ぼう
2025.03.19
部下の「タスクの先延ばし」が少ない上司の特徴とは? 研究が示す、先延ばし行動を減らすリーダーの条件
2025.03.18
フェデラー氏が語る「努力しない成功は神話」という真実 ダートマス卒業生に贈る勝利の秘訣
2025.03.18
全知全能の最先端AI「Cristal」が企業の大脳となる ソフトバンク孫正義氏が語る、現代における「超知性」の可能性
2025.03.19
フェデラー氏が語る「ただの1ポイント」の哲学 ウィンブルドン敗北から学んだ失敗からの立ち直り方
2025.03.18
部下に「そうかなぁ?」と思われない1on1の問いかけ エンゲージメントを高めるマネジメントに欠かせない「聴く」技術
2025.03.19
組織をダメにする“害虫”の正体は間違った思い込み AIやDXなど手段のみにこだわるダメ上司の見極め方
【手放すTALK LIVE#046】 出版記念イベント 『大きなシステムと小さなファンタジー』 一つ一つのいのちが大切にされる社会へ
2025.02.03 - 2025.02.03
「聴く」から始まる組織変革 〜篠田真貴子さんと考える対話型マネジメント〜
2025.02.14 - 2025.02.14
「目の前の利益を優先する」心理とは:ビジネスに活かせる意思決定の科学
2025.02.12 - 2025.02.12
新刊『組織をダメにするのは誰か?職場の問題解決入門』出版記念セミナー
2025.02.04 - 2025.02.04
会社の体質、これまでどおりで大丈夫? 職場に新たな風を吹き込むための「ネガティブ・ケイパビリティ」入門
2025.02.10 - 2025.02.10