ブックマーク / onk.hatenablog.jp (28)

  • Modular Monolith はどの辺りから考え始めるものなのか - id:onk のはてなブログ

    モノリスでは大変なので、マイクロサービスやモジュラーモノリスにして認知負荷を減らしたり、生産性の劣化に抗いたいという考え方がある。 モジュラーモノリスとは モジュラーモノリスについては、だいたい infoq.com のモノリスシリーズ(?)を読めば良いんじゃないか。 有名なのは Shopify のヤツ。 モノリスとマイクロサービスの中間にある、1 アプリケーションなんだけどモノリスでは無い、アプリ内でモジュール分けされているアーキテクチャのこと。app/ の直下に MVC を置くんじゃなくて、COMPONENTS (例えば billing)/app/ の下に MVC を置く、ようなイメージ。 モジュラーに移行するタイミング 僕の感覚だと、数百モデルは全然モノリスで扱えると思っている。少なくとも 300 models 程度でモジュラーにしていく必要はまったく感じない。 世の中で見つけたモデル

    Modular Monolith はどの辺りから考え始めるものなのか - id:onk のはてなブログ
  • 変化バジェットという考え方 - id:onk のはてなブログ

    この記事は はてなエンジニア Advent Calendar 2023 の 1/2 の記事です。昨日は id:nakataki の 1904年になりました(dayjsでの年入力の話) - nakatakiの日記 でした。190x 年から脱出できない面白い不具合でした。 変化バジェット 「変化バジェット」という考え方があります。というか世の中には無いんですが、僕は社内でこの概念をよく使っています。 Google 検索 *1 Twitter 検索 私が発した言葉のログしかありません だいたい名前から想像するものと同じなんじゃないでしょうか。組織が変化に対して許容できる予算枠だったり、組織が変化に対して投資する予算枠だったりを指しています。 変化バジェット=許容量 変化バジェットは、組織が効果的に変化を取り入れ、消化できる能力の範囲を指します。 組織の変化に許容量があるという概念は、組織に対して

    変化バジェットという考え方 - id:onk のはてなブログ
  • 「キャッシュは麻薬」という標語からの脱却 - id:onk のはてなブログ

    これは はてなエンジニア Advent Calendar 2023 の 18 日目の記事です。昨日は id:gurrium による private-isuで70万点取るためにやったこと - ぜのぜ でした。私は 50 万点ぐらいで満足してしまっていたので、しっかり詰めていて凄いなと思う。 developer.hatenastaff.com Web アプリケーション開発において、「キャッシュは麻薬」という言葉がインターネット上をよく飛び交っています。YAPC::Kansai OSAKA 2017 の id:moznion のトークでよく知られるようになったワードじゃないかな。 初出はちゃんとは分からないんですが、少なくとも 2011 年には言われていますね。 「キャッシュは麻薬」とはよく言ったものだ。— TOYAMA Nao (@nanto_vi) November 5, 2011 キャッシ

    「キャッシュは麻薬」という標語からの脱却 - id:onk のはてなブログ
  • Ruby/Rails の勉強に何読んだらいいかと聞かれたとき - id:onk のはてなブログ

    「次の職場が Ruby なんだけど」と読み書きそろばんを聞かれたのと、大阪Ruby会議03、大江戸Ruby会議10、Kaigi on Rails 2023Ruby/Rails 関係のイベントに続けて参加して、作者の皆さまと会ったので。 「読める」になるために 言語仕様は何らかの 1 冊の冒頭の方を読めば雰囲気は掴めるだろう。 Ginza Rails27 igaiga - Speaker Deck 著書や技術顧問、健康診断レポート でお馴染みの @igaiga555 さんの作った表で、難易度別にまとまっている。 たのしいRuby か、プロを目指す人のためのRuby入門 が定番かなぁ。 できることを知る るりま (Ruby リファレンスマニュアル) の Enumerable、String Rails Guides の Active Support Core Extensions 日

    Ruby/Rails の勉強に何読んだらいいかと聞かれたとき - id:onk のはてなブログ
  • 作業者じゃなく開発者でありたい - id:onk のはてなブログ

    自分がこうありたいというメモ。 作業者と開発者の違いとして、問題解決への寄与だとか、創意工夫の余地があるかというのがありそう。 これは今 GPT-4 に聞いた。 Q: 作業者と開発者の違いを100文字ぐらいで教えて。 A: 作業者は指定されたタスクや手順を実行する人を指し、特定のルーチンや手順に従って作業を進めることが主な役割です。一方、開発者は新しい製品やソフトウェアを設計・構築する人を指し、創造性や技術的なスキルが求められます。作業者は指示に従い行動し、開発者は新しいアイディアや解決策を生み出します。 単なるタスクの遂行でなはく、より多くの責任とリーダーシップを求めている コードを書くだけではなく、問題解決や創意工夫の余地が多くあるタスクが欲しい 自分のアイディアをベースとして、形にすることで、プロジェクトを完遂したい そもそも何が問題なのかを明らかにするだとか、最適な解決策を見つける

    作業者じゃなく開発者でありたい - id:onk のはてなブログ
  • 手を動かさないマネージャーを試している - id:onk のはてなブログ

    2 月から、Mackerel チームの所属になった。 今日から異動して Mackerel チームです。非正規ルートでの要望でもいい感じにやるので何でもください!— Takafumi ONAKA (@onk) February 1, 2023 これを期に、せっかくなのでコードを読まないマネジメントスタイルを試してみようと思って、実践している。 今までは自分が一番プロダクトのコードベースに詳しい状態を作ってきていて、障害対応でも嬉々として先頭に立つようなテックリードスタイルだった。 この姿が天職と思っているが、今までの人生で、コードの細かい話が通じない (というか、共通言語や会話のレイヤーが違う) けれども非常に信頼できるマネージャーと仕事をしてきた経験はあるので、自分も彼らのようなムーブが可能なんだろうかとやってみたくなったのだ。知識欲が減衰した老害化現象ではないと思う。きっと、たぶん。 も

    手を動かさないマネージャーを試している - id:onk のはてなブログ
  • 先回りするコツとミカドメソッドという手法 - id:onk のはてなブログ

    実装を進める上で障害になりそうなところを先回りして直してるように見えるけど、一体どうやって検知しているかという話題。 結論から言うと「慣れです」なんだけど、こういう考え方があるよというのを紹介しておく。 mikadomethod.info ちょうど10年ぐらい前に話題になった手法だけど、考え方としてはまだまだ現役です。 概要は家なりこの辺のリンク先なりを見て貰って。 開発者のためのソフトウェアテストのスキルアップ | Think IT(シンクイット) 大規模コードをリファクタリングする方法『ミカドメソッド(Mikado Methood)』について | Futurismo テストとリファクタリングに関する深い方法論 #wewlc_jp レガシーソフトウェア改善ガイド | Amazon 僕の理解は 1 ループ目 やりたいことを実現するコードを書く ギャップが無ければサクッと実装して終わり

    先回りするコツとミカドメソッドという手法 - id:onk のはてなブログ
  • 放っておくと進まない仕事を進めるために - id:onk のはてなブログ

    はてなは 7 月決算なので期のふりかえりをやっていたんだが、今期は「放っておくと進まない仕事を進めるために、時間を確保する」ことで進むようになった期だった。ちなみに前期は「放っておくと進まない仕事を進めるために、締切を設定する (強制力を持たせる)」ことで進めようとしていた期だった。 放っておくと進まない仕事とは、優先順位が低い仕事のこと。やってもやらなくても直ちに影響はない仕事をどうやったら進められるのかというのは長年ずっと課題だったが、やっと自分の中である程度答えが見えてきたかもしれないので記しておく。書き出してみたら至って普通なんだけど、以下をやっている。 見積もる 締切を作る 締切を宣言する 時間を押さえる 見積もる チームで見積もりを行い、まずはタスクの重さや実現方法についての共通認識を持つ。 タスクを分解する、とも言い換えられる。やるべきなんだけど気が重い仕事はとにかく分解しま

    放っておくと進まない仕事を進めるために - id:onk のはてなブログ
  • ISUCON10 予選敗退^H^H突破した - id:onk のはてなブログ

    id:uzulla、id:moznion と共に curl gotti というチーム名で出場しました。このメンバーでやるのは去年に引き続き 2 回目。 三行で 最高得点 2125 で予選通過ならず 繰り上がり当選した!!! ほぼいつもの力が出せた。ので実力不足である。。 とても楽しめた良問だった。ありがとうございます 多分この辺の施策をやったんだと思う condition.json を静的に返す 雑に INDEX 張る features の LIKE 検索を正規化して撲滅 xxxRangeId カラムを追加 なぞって検索の N+1 改善 PHP のチューニング DB のチューニング ORDER BY popularity DESC, id ASC をどうにかする DB 2 台構成に Bot に 503 を返す 自分が考えたことや手を動かしたことは分かるんだけど、それ以外のチームメンバーがや

    ISUCON10 予選敗退^H^H突破した - id:onk のはてなブログ
  • RSpec では context 間の違いを表現するときにのみ let を使う - id:onk のはてなブログ

    Test which reminded me why I don't really like RSpec | Arkency Blog (日語訳:Rails: RSpecが好きでないことを思い出したテスト(翻訳)|TechRacho by BPS株式会社) を見ての感想。 元のコードのイマイチなところは 4 つあって、 params を before で書き換えている *1 it "will succeed" の文言 it { is_expected.to be_success } と expect(result.success?).to eq(true) が混ざっている let が不思議な順序で連発されていて事前条件を読み解けない すべて、これによって何をテストしているのかが分かりづらくなっているという問題を引き起こす。 params を before で書き換えている let(:pa

    RSpec では context 間の違いを表現するときにのみ let を使う - id:onk のはてなブログ
  • irb に show_source があることをもっと知らしめたい - id:onk のはてなブログ

    要は以下の記事の繰り返しなのだが。 k0kubun.hatenablog.com Kaigi on Rails _2022_ new というイベントの LT で、メソッド定義を探ろうという話があった。 speakerdeck.com Rails のソースをシュッと眺めに行くという、非常に尊い良い発表でした。 Object のことは Object に聞け、は Ruby の非常に面白いところなので、Method を取り出して source_location を尋ねるのは一度体験して感動して欲しいんだけど、実務だとタイプ数の少ないやり方も知っておくと更に便利に使えるのでご紹介。 irb の show_source も武器に加えてあげたい #kaigionrails— Takafumi ONAKA (@onk) October 9, 2022 Pry の $ https://github.com/

    irb に show_source があることをもっと知らしめたい - id:onk のはてなブログ
  • 最近買ったイヤホンたち - id:onk のはてなブログ

    密閉型イヤホン以外でWeb会議アドベントカレンダーに遅れて参戦! こういう状態。 ここ3年で増えたヘッドンホホたち SONY WH-1000XM4 www.sony.jp ヘッドフォンですね。2020-09 に買った。 外音取り込みは、外の音が聞こえるイヤホンを↓でいっぱい買ったので、むしろ外音を取り込まないために使うヘッドフォンになった。 ノイズキャンセリングは最高に便利。僕もも机を並べて WFH しているので、同時に会議すると声が混ざって困り、この子に付け替えている。 AfterShokz OpenComm OPENCOMMjp.shokz.com 骨伝導。2020-11 に買った。 耳を塞がず (外耳炎にならなくて最高) に外の音が自然に入ってくる (在宅作業しやすくて最高) のはものすごく快適で、しばらく「最高〜〜〜〜!!!」と思って暮らしていた。 完全ワイヤレスではなく、ヘッド

    最近買ったイヤホンたち - id:onk のはてなブログ
  • AWS Lambda でコンテナに入れた Sinatra を動かす - id:onk のはてなブログ

    何番煎じか分からないけど、最近やったので。 前提知識 AWS Lambda + Amazon API Gateway で HTTP リクエストを受け付けることができる AWS Lambda ではコンテナイメージを動かせる New for AWS Lambda – Container Image Support | AWS News Blog AWS Lambda で Sinatra アプリを動かすための公式サンプルがある https://github.com/aws-samples/serverless-sinatra-sample つまりコンテナ化した Sinatra アプリを Lambda 上にデプロイして HTTP リクエストを受け付けることができる。 動かす準備はもう全部整っていて、お手軽そうですね。 Ruby アプリを Lambda で動かすコンテナイメージを作る Sinatra

    AWS Lambda でコンテナに入れた Sinatra を動かす - id:onk のはてなブログ
  • アプリ内の日付変更線をズラす系の実装 - id:onk のはてなブログ

    例えば日記を書くときに、午前 2 時に書いたものは前日分としたいことがある。またユーザがメチャクチャ多いサービスでは、0:00 を回ったら翌日のログインボーナスを配る、としていると、まだユーザが多い時間にサーバの処理が要求されて大変なので、28:00 を日付変更線にしたいことがある。 こういうときには module AppTime def self.beginning_of_day(time) t = time.change(hour: 4) t <= time ? t : t - 1.day end end を作って、 AppTime.beginning_of_day(Time.current) を使うと「アプリ内の日付変更線では何日なのか」が取れる。 # 02:00 は前日扱い time = Time.zone.parse("2021-01-31 02:00") AppTime.beg

    アプリ内の日付変更線をズラす系の実装 - id:onk のはてなブログ
  • クエリパラメータのデリミタに ; を使うこともできる - id:onk のはてなブログ

    記事は、はてなエンジニア Advent Calendar 2020 の 18 日目の記事です。昨日は id:YaaMaa さんでした。 yaamaa-memo.hatenablog.com 社内チャットではこの話で盛り上がったときにトライ木も作られており、良い頭の体操になっていました。 さて、題。 Hatena::Let を眺めていて、こんな URL に気づいた。 http://let.st-hatelabo.com/onk/let.iframe?code_id=g5G0uOeEqfcA;key= クエリパラメータにセミコロン……! パッと考えるとこれは { code_id => "g5G0uOeEqfcA;key=" } となりそうで、というか Ruby で実際にパースするとそうなる。 uri = URI("http://let.st-hatelabo.com/onk/let.ifr

    クエリパラメータのデリミタに ; を使うこともできる - id:onk のはてなブログ
  • ソフトウェア式年遷宮という概念の歴史と、Hatena::Let での実例 - id:onk のはてなブログ

    Hatena Engineer Seminar #17 にて発表しました。 hatena.connpass.com Hatena::Letの式年遷宮 from Takafumi ONAKA www.slideshare.net 発表内容をかいつまんで記事にも書いておきます。 Hatena::Let とは はてラボ のサービスの一つ。 僕も入社するまで、はてラボ == ベータ版、だと思ってたんですが、 ラボならではの挑戦的なサービス 運用費が会社持ちで、会社の名前で出しても良い、はてなスタッフの有志が運営するサービス、という制度 も含んでいます。 で、Hatena::Let は、現在は主に id:onk が開発している、ブックマークレットをかんたんに作成・公開できるサービスです。 ソフトウェア式年遷宮とは 初出は 2013 年の id:kenjiskywalker によるもので、このときはイ

    ソフトウェア式年遷宮という概念の歴史と、Hatena::Let での実例 - id:onk のはてなブログ
  • フルタイムでやる仕事を作る #wantedlydev - id:onk のはてなブログ

    先日 Wantedly さんのエンジニアリングマネージャー座談会に出演させていただいた。 wantedly.connpass.com テーマは、「エンジニアリングマネージャーの課題を相談したい人が多い」「その相談パブリックにしよう」なので、自分が最近課題に思っている「変化の速度感」についてざっくばらんに会話できたらなーというのが期待だった。 イベント中には、大きく 4 つの話をしたのかな。それぞれ会話の中では話しきれなかったことも補足しつつ書いていく。 技術スタックが違うチーム プロダクトと専門組織のバランス 専門組織を立ち上げるポイント 採用と oss-guild 技術スタックが違うチーム リンク先を見て貰うと顕著に分かると思うけど、はてなでは、そこそこバラバラな技術スタックを使っている。 hatenacorp.jp インフラは AWSGoogle Cloud (オンプレはやっと撲滅し

    フルタイムでやる仕事を作る #wantedlydev - id:onk のはてなブログ
  • オンボーディングは3ヶ月で3連勝を目指す - id:onk のはてなブログ

    先日 ヘンリーで活躍中の id:Songmu を訪問 | はてな卒業生訪問企画 [#3] - Hatena Developer Blog という対談記事でもオンボーディングについて話したんだけど、社内では最近「3ヶ月で3連勝」を標語にしている。 オンボーディングとは 採用や異動などでチームにジョインした後に行う、早期戦力化のための施策のこと。開発環境のセットアップやチームの説明だけじゃなく、戦力になるまでのプロセス全部を指していそう。 僕らは各アカウント作成や開発環境構築はチェックボックス化してドンドン進められるようにしている *1 し、事業の説明、組織の説明、システム構成の説明をする場を設定したり、技術スタックへの入門のための実績解除システムを用意したりしてきた。 これらのドキュメントに従って作業を進め、実績を解除していくことで、作業的・技術的な道標はあるものの、オンボーディングプロセス

    オンボーディングは3ヶ月で3連勝を目指す - id:onk のはてなブログ
  • 期待値をチューニングする - id:onk のはてなブログ

    吉祥寺.pm30 で、チューニングがテーマだったので、マネージャとメンバー間で期待値をチューニングするという LT をしてきた。 トークタイトルは熊とワルツを。トム・デマルコのです。 熊とワルツを リスクを愉しむプロジェクト管理 作者:トム デマルコ,ティモシー リスター日経BPAmazon 「管理」という言葉 「管理」と訳される単語は色々ある goo 和英辞書 によると 〔経営〕management 〔経営,運営〕administration 〔統制〕control 〔監督〕supervision 英辞郎 on the WEB によると administration〔【略】admin. ; adm.〕 caretaking(建物・土地などの) caretaking〈英〉(学校などの公共施設の) charge conduct(業務などの) control custody(大事な物の) d

    期待値をチューニングする - id:onk のはてなブログ
  • branch を寝かせるときは TODO.txt を置いている - id:onk のはてなブログ

    タイトルがすべて。 思いついたら手を動かしてしまう性質なので、秘蔵のブランチを大量に持っている。 秘蔵のブランチというのは、動いたけどチームメンバーを説得するのが面倒とか、テスト書くのが面倒とか、だいたい動いているけどやりきるのが面倒とかで main にマージしていないヤツ。 例えばフレームワークのメジャーバージョン上げるブランチとか、依存ライブラリをより一般的/現代的なものに交換するブランチや、より良い設計を思いついたのでガッと書き換えてしまうブランチが多いかな。 だいたい 1 年所属していると 80 ブランチぐらい溜まるので、週 1 つ以上は何か作りかけてる計算になる。 ローカルブランチの数、プロンプトに出しておくかな……。(秘蔵のブランチが溜まってる— Takafumi ONAKA (@onk) March 28, 2017 もちろん自分でいいアイディアだと思っているから実装している

    branch を寝かせるときは TODO.txt を置いている - id:onk のはてなブログ