タグ

ブックマーク / itchyny.hatenablog.com (41)

  • リリース時にのみ行う処理はできるかぎり減らす - プログラムモグモグ

    GitHub Actionsなどでテストやリリースを自動化していると、様々なトリガーによって異なる処理を行うことはよくあることです。 例えばpushのトリガーではテストやlintを行い、tagをpushしたときはクロスビルドしてリリースする、などです。 これらの処理は内容も頻度も異なるので、ワークフローのファイルを分けることはよくあることだと思います。 私もかつてはこのようにトリガーや実行したい頻度が異なるのだから分けるのは自然なことだと考えていました。 一つのワークフローの中でトリガーによって処理を分岐させるとワークフローが複雑になるし、面倒なことが多いからです。 しかし、最近はリリース時の処理をテストと同じワークフローにまとめる方が良いと考えるようになりました。 リリースする時になって初めて動く処理が多いほど、リリースのワークフローが壊れるリスクが高まるからです。 GitHub Act

    リリース時にのみ行う処理はできるかぎり減らす - プログラムモグモグ
    igrep
    igrep 2024/03/07
    " リリースのためのビルド処理は、テストと同じ頻度で行いましょうということだと思います。 また、テストが通らなかったらリリースを止めたいという素朴な要件が、ワークフローがまとまっていれば簡単に達成できる"
  • Mackerel REST APIのRustクライアントで取り入れた設計 - プログラムモグモグ

    この記事はMackerel Advent Calendar 2023の15日目です。 昨日はkmutoさんでした。 MackerelのREST APIクライアントをRustで書き始めたのは2017年の春のことでした。もう六年半も前のことになります。 2017年ごろの日記を見返してみるとRustにかなりハマっていた時期で、色々なツールを作っていたのを思い出しました。 mackerel-client-rsはそれ以来放置してしまっていたのですが、最近また急にRustのやる気スイッチが入ったので、色々と実装し直しています。 github.com 久しぶりにMackerelAPI一覧のドキュメントを見ると、ダウンタイムやアラートグループ設定といった個人的に思い入れのある機能のAPIや複数のホストを一括で操作するAPIなどが追加されていて、進化を感じました。 死活監視のステータスや外形監視のリダイレ

    Mackerel REST APIのRustクライアントで取り入れた設計 - プログラムモグモグ
    igrep
    igrep 2023/12/16
  • RenovateでGitHub成果物のチェックサムを更新する - プログラムモグモグ

    開発やビルドに必要なツールをインストールするとき、特にビルド済みの実行ファイルをインターネットからダウンロードするとき、セキュリティインシデントを防ぐためにはアーティファクトを信頼しても良いか確認しなくてはいけません。 もしGnuPGで署名されていればそれを使うことになりますが、正直に言うと開発者にとってもユーザーにとっても手間がかかることが多いです。 一般によく取られている方法が、チェックサムファイルをアーティファクトと一緒に公開することです。 ユーザーは、sha256sumコマンドなどでアーティファクトのチェックサムを公開されているチェックサムと比較し、改竄されていないことを確認できます。 中間者攻撃やソーシャルハッキングによるアーティファクトの改竄などのシナリオを想定すると、アーティファクトと同じドメインで公開されているチェックサムファイルを、同じスクリプトのなかでダウンロードして使

    RenovateでGitHub成果物のチェックサムを更新する - プログラムモグモグ
  • jq 1.7をリリースしました - プログラムモグモグ

    jqがjqlang organizationに移譲され、数名の新たなメンテナーを入れた開発体制に移行してから三か月が経ちました。 私にとってこの三か月はとても濃厚で、これまでのOSS活動の中でも特に大変な期間でした。 itchyny.hatenablog.com github.com リポジトリの管理権限をいただいてからまずやったことは、既存のissueやPRの整理でした。 500ほどのissueとPRに目を通し、ラベルをつけて、解決済みのものを閉じて、直近で入れたいものを独断でリリースマイルストーンに入れていきました。 この整理がついた頃には他のメンテナの活動も活発になり、私の作ったマイルストーンのissueやPRを確認してくれました。 そして先日、ようやく1.7をリリースしました。 1.6から実に五年弱、一時は開発が完全に止まってしまいプロジェクトの存続を危ぶむ声も上がるような状況から

    jq 1.7をリリースしました - プログラムモグモグ
    igrep
    igrep 2023/09/12
    お疲れ様です!素晴らしい!
  • jq が jqlang organization に移譲されました - プログラムモグモグ

    JSONを操作するコマンドラインツールであるjqは、これまでオリジナル作者であるStephen Dolan氏 (@stedolan)のリポジトリ(github.com/stedolan/jq)で管理されていました。 メンテナンスはNico Williams氏 (@nicowilliams)とWilliam Langford氏 (@wtlangford)の二名が行なっていましたが、近年は活動が減っておりメンテナンスが滞っていることが度々指摘されていました。 最新のリリースは2018年11月に行われた1.6であり、その後に様々なバグ修正やパフォーマンス改善、新機能の実装が行われているのにリリースされておらず、またissueやPRも放置されがちになっていました。 さらにCI (AppVeyor)は常に落ちるので、簡単なドキュメント修正でもCIが通らず苦情が来る、数か月放置されたPRは作った人が諦

    jq が jqlang organization に移譲されました - プログラムモグモグ
    igrep
    igrep 2023/05/31
  • Go言語でJSONをYAMLに変換するコマンド json2yaml を作りました! - プログラムモグモグ

    JSONをYAMLに変換するコマンド json2yaml を、Go言語で作ってみました。 他の言語も含めると同じようなコマンドラインツールは無数に作られていますが、 Goのライブラリとして組み込みたかったというのが最初のモチベーションです。 また、JSONをストリーミング的にYAMLに変換できるのかという疑問を以前から抱いていて、ここに答えを得たかったというところもありました。 github.com go install github.com/itchyny/json2yaml/cmd/json2yaml@latest Homebrewでもインストールできます。 brew install itchyny/tap/json2yaml JSONファイルを引数にしてYAMLを出力したり、 $ cat sample.json { "Sample": "JSON" } $ json2yaml sam

    Go言語でJSONをYAMLに変換するコマンド json2yaml を作りました! - プログラムモグモグ
  • 株式会社はてなを退職しました - プログラムモグモグ

    日2021年9月30日が最終出社日でした。1か月間のお休みをいただき、11月から新しい職場で働きます。2015年4月に新卒入社して、Mackerelチームとブックマークチームに所属しました。約六年半、お世話になりました。どちらのプロダクトも携わることができて楽しかったです。 入社時はウェブサービスの実装について何も知らない状態でした。しかしMackerelチームの優秀な先輩と理解あるプロダクトオーナーとディレクターに支えられて、様々なことを学びながらサービスと共に成長できました。サーバーやフロントエンドを書いたり、機能を作ったり閉じたり、年の瀬の夜中に障害対応したり、ioドメインが壊れたり、Linuxカーネルのコードを読んだり、時系列DBをクラウド上で実装したり、競合との差別化を考えたり、お客様とサービスの強み弱みについて議論したりしながら、SaaSビジネスをやる上での色々なことを経験で

    株式会社はてなを退職しました - プログラムモグモグ
    igrep
    igrep 2021/10/01
    「株式会社はてな」で始まるタイトルを見た瞬間「エイプリルフールかな?」と思うクセができてしまった。
  • Go言語のorderedmapパッケージを改善した - プログラムモグモグ

    Go言語で書かれたorderedmapというサードパーティパッケージがあります。 github.com Gomapには順序がなく、JSONをデコードすると順序が失われ、それをエンコードするとオブジェクトのキーの順序にソートされます。 これに困る人はそこそこいるようで、順序を保持するmapはいくつか実装されてきました。 その中の一つが、orderedmapというパッケージです。 シンプルなインターフェイスが気に入っています。 orderedmapパッケージの利用例 package main import ( "encoding/json" "fmt" "log" "github.com/iancoleman/orderedmap" ) func main() { src := `{ "z": 1, "x": 2, "y": 3 }` fmt.Println("# map[string]in

    Go言語のorderedmapパッケージを改善した - プログラムモグモグ
  • Vimのパッチ存在確認処理を速くした - プログラムモグモグ

    昨日Apple Eventを待機しながらVimのコードを眺めていたら、なんだか香ばしい匂いのするコードを見つけてしまいました。 /* * Return TRUE if patch "n" has been included. */ int has_patch(int n) { int i; for (i = 0; included_patches[i] != 0; ++i) if (included_patches[i] == n) return TRUE; return FALSE; } ペロッ… こ、これは、線形探索! Vimは、メインのブランチのすべてのコミットでパッチバージョンが上がっていく方式をとっています。 プラグインが新しい機能を使いたい時に、ユーザーが使っているVimに特定のパッチが入っているかをチェックする必要があります (関数やイベントなど機能が入っているかを直接チェッ

    Vimのパッチ存在確認処理を速くした - プログラムモグモグ
    igrep
    igrep 2020/11/12
  • ファイルをエディターで一括リネームするツールをGo言語で作った! ― 機能を増やさない信念と、OSSとの付き合い方 - プログラムモグモグ

    ファイルを一括でリネームしたいことはありませんか。私はあります。ということで作りました。 インストールはHomebrew brew install itchyny/tap/mmv または以下のコマンドでできます。 go get github.com/itchyny/mmv/cmd/mmv スクリーンショットではvimが起動していますが、 $EDITOR が設定されていればそれを使って編集することができます。 エディターでファイル名を編集して一括でリネームするというのは、新しい発想ではありません。 実際、多くのソフトウェア (特にファイラー) がこの機能を実装しています。 massren vimv qmv Vim plugin vimfiler Defx Vaffle fila.vim Emacs Dired 私はvimfilerの一括リネーム機能をよく使っていました。 特に不満はないのです

    ファイルをエディターで一括リネームするツールをGo言語で作った! ― 機能を増やさない信念と、OSSとの付き合い方 - プログラムモグモグ
    igrep
    igrep 2020/01/11
  • 実装して理解する遅延評価の仕組み 〜 thunkを絵に描いて理解しよう・JavaScriptでHaskellを実装!? - プログラムモグモグ

    この記事では, Haskellに用いられる「遅延評価」の仕組みを, 図に描いて説明します. 更に, 遅延評価版のフィボナッチ数の無限列を, JavaScriptで実装します. 遅延評価とはどのように動くのか, 考えて行きましょう. HaskellのコードとJavaScriptのコードの比較 Haskellでの x = y y = 10 と, JavaScriptの var x = y; var y = 10; というコードを考えてください. Haskellのコードは, これだけでは何も起こりません. print xとすると, x = y = 10 となって 10 が表示されます. 一方, JavaScriptのコードは var x = y; を評価した瞬間, 「ReferenceError: y is not defined」というエラーが出ます. 更に, main = let x = 1

    実装して理解する遅延評価の仕組み 〜 thunkを絵に描いて理解しよう・JavaScriptでHaskellを実装!? - プログラムモグモグ
  • 2019年を振り返って - プログラムモグモグ

    今年は仕事の部署異動があり気分一新したわけですが、思うようにパフォーマンスを出せず悩んでいたような気がします。前半もチームのために頑張っていた気がするんですがすべて忘れました。 今日は実家でgoreのGo modules対応をやってました。いい加減modules対応していないのやばいよなと思って一所懸命packagesパッケージのコードを読んでいます。まだ確認しないといけないパターンは沢山ありそうですが、年始にはマージする予定です (と書いて追い込んでおく)。goreは当に便利なのでmodulesごときで死なせたくないですね… 今年はgojqを作れたのは大きいですね。これは当にいいプロダクトなはずなんですが、宣伝がうまく行ってなくてイマイチですね。docker関連ツールの組み込みあたりを狙えたら望なんですが、その前に英語で紹介記事を書かないとだめですね。しかしこれを作ったことで一年前

    2019年を振り返って - プログラムモグモグ
    igrep
    igrep 2020/01/01
    "最近社内で圏論勉強会をやっていて、圏論に対する理解がかなり深まったのは大きな収穫です。随伴とか普遍的構成、極限あたりの考え方がだいぶ理解できて自信が付きました" すごい!
  • GitHub Enterprise から GitHub への移行ツールをGoで作りました! - プログラムモグモグ

    弊社ではGitHub Enterprise (以下GHE) からGitHubへの移行が進んでいます。今年頭のプラン改変やGitHub Connect、ActionsやAppsの充実などGitHubの機能強化が後押しとなりました。GHEのメンテナンスコストも徐々に重荷になってきていました。 リポジトリを移行するにあたって問題となるのが、これまでの歴史をどこまで新リポジトリに移行するかということです。もちろんgitのログはそのまま移行できますが、以下のようなものも移行したいと言われると色々と考えることが出てきます。 issueやpull requestのコメントやレビュー、ラベル コードコメントからの参照もあるし、リポジトリ間も相互にリンクしている 番号を維持したい projectやmilestone スプリントのフローが依存している 今のカンバンをそのまま移行したい これらをすべて移行するツ

    GitHub Enterprise から GitHub への移行ツールをGoで作りました! - プログラムモグモグ
    igrep
    igrep 2019/12/26
    素晴らしい
  • 開発環境構築スクリプトのCIをGitHub Actionsで回す - プログラムモグモグ

    小ネタですが、開発環境の構築はスクリプト化して、CIを回そうという話です。 開発環境を構築することは年にそう何回もあるわけではないですが、スクリプトを一発叩いて必要なツールが揃うようにしておくと便利です。私は素朴にシェルスクリプトで書いています。好きな言語で書けばいいと思いますが、macOSは将来的にRubyPythonといったスクリプト言語を排除しようとしていて、不安ですね。Ansibleみたいなのを使ってもいいと思います。私はちょっと苦手で… あくまで私用のスクリプトなので使わないでください。 このスクリプトを叩いてしまえば、iTerm2やVim、tmux、自分のdotfilesの配置と言語処理系のインストール、Google ChromeSlackのインストールを行ってくれます。モダンなプロジェクトならdockerさえあればいいんでしょうが、なかなかそういうわけにはいかないですよね

    開発環境構築スクリプトのCIをGitHub Actionsで回す - プログラムモグモグ
    igrep
    igrep 2019/11/18
    なるほどー。その辺うまくいかなかったら適宜手でやってるな...😅
  • jqのGo実装 gojq を作りました! ― スタックマシン型インタープリタによるイテレータセマンティクスの実装 - プログラムモグモグ

    jqはとても便利なコマンドです。 JSONを返すAPIを実装するときや、SaaSのAPIから特定の情報を抜き出してシェル変数に代入するときなど、web開発や運用には欠かせないツールとなっています。 しかし、私にとってjqのクエリを一発で書くのは容易ではなく、思い通りの出力が得られないことがよくありました。 難しいエラーメッセージに悩まされて、jqで書くのを諦めて別の言語で書き直すこともありました。 jqの十八番と思える場面で使いこなせないのは、なかなか悔しいものがあります。 ツールを使うのが難しいなら、同じものを作ってしまえばよいのです。 jqの全ての機能を実装する jqを言語としてきちんと書けるようになる jqを完全に理解する jqの全ての機能を自分で実装してしまえば、jqがどういうものか、クエリがどのように処理されるのか、詳しくなれるはずです。 jqを得意な言語と言えるようになって、ク

    jqのGo実装 gojq を作りました! ― スタックマシン型インタープリタによるイテレータセマンティクスの実装 - プログラムモグモグ
    igrep
    igrep 2019/08/26
    相変わらずすごい
  • joのGo実装 gojo を作りました! - プログラムモグモグ

    joというJSONを組み立てるコマンドがあって、これは2016年からある便利なCLIツールなのですが、昨日急に思い立ってGo実装を作りました。 go get github.com/itchyny/gojo/cmd/gojo brewでもインストールできます。 brew install itchyny/tap/gojo 使い方はこんな感じ。 $ gojo foo=bar qux=quux {"foo":"bar","qux":"quux"} $ gojo -p foo=bar qux=quux { "foo": "bar", "qux": "quux" } $ gojo -a foo bar baz ["foo","bar","baz"] $ seq 10 | gojo -a [1,2,3,4,5,6,7,8,9,10] $ gojo -p foo=$(gojo bar=$(gojo baz

    joのGo実装 gojo を作りました! - プログラムモグモグ
  • gore 0.4.0をリリースしました! - プログラムモグモグ

    Go言語のREPL、goreの0.4.0をリリースしました。 id:motemenさんに連絡をとって、goreのコミット権をいただきました。 最初はpull requestが溜まっていたので片付けて、細かいバグ修正などを行いました。 しばらく触っていると慣れてきたので、新機能も実装して入れました。 かなり便利になっているので、ぜひアップデートして (またはインストールして) お使いください。 go get github.com/motemen/gore/cmd/gore バグ修正 特定のケースで Evaluated but not used というエラーが出ることがあるのを修正しました 例えばlen(fmt.Sprint(1)) を二回評価すると出ていた おかしなトークンが入力されたらエラーを表示するようにしました 例えば foo # bar と入力すると invalid token: "

    gore 0.4.0をリリースしました! - プログラムモグモグ
  • はてな・ペパボ技術大会 #4 〜DevOps〜 @京都 で登壇しました - プログラムモグモグ

    先日 6/23 に技術イベント「はてな・ペパボ技術大会 #4 〜DevOps〜 @京都」で登壇・トークセッションに参加しました。 hatena.connpass.com 普段の業務でDevOpsという言葉を使うことはありません。 しかし、DevOpsのあり方を見直した結果が現状の体制や仕事のフローであったり、あるいはこれからやろうとしていることにつながっているのだと思います。 技術の進歩によりDockerGraphQLといった、レイヤー間の共通言語が発達する中で、ソフトウェア間あるいはチーム間が疎結合になっていくことはよいです。 一方でそういう技術で解決できない場面も残っていくのだろうなと思います。 技術の進歩により、調達やスケールアウト・オートスケールは人がやることではなくなってきています。Devがインフラを触れるようになっていくとよさそう (これは技術の進歩もあるけれど、それができる

    はてな・ペパボ技術大会 #4 〜DevOps〜 @京都 で登壇しました - プログラムモグモグ
    igrep
    igrep 2018/06/25
    “Devがインフラを触れるようになっていくとよさそう ... なのと同様に、Opsもオペレーションツールを作ったり、あるいはLinuxの深い知識とコーディング力を生かしてミドルウェアを自前で作ったりできる人”
  • バイナリエディタを作りました! - プログラムモグモグ

    バイナリエディタを作りました。 インストールはHomebrew brew install itchyny/tap/bed または以下のコマンドでできます。 go get github.com/itchyny/bed/cmd/bed なぜ作ったのか 私は昔からファイルフォーマットに興味があり、画像ファイルやPDFファイルのフォーマットを調べるのが好きでした。 最近も圧縮ファイルのフォーマットを趣味で調べたりしています。 コンパイラ技術にも興味があり、ゆくゆくは実行ファイルを生成したりしたいなという思いもあります。 バイナリファイルをエディットするにはバイナリエディタが必要となるわけですが、自分の手に馴染むUIを持つエディタがありませんでした。 私は実はVimというエディタが好きなので、Vimのようなインターフェースを持ち、ターミナルの中で動くエディタを探したのですが、なかなかありません。 b

    バイナリエディタを作りました! - プログラムモグモグ
    igrep
    igrep 2018/04/10
    さすがやで
  • 2017年を振り返って - プログラムモグモグ

    今年は仕事で関わっているプロダクトが大きな転換期を迎えて、様々な経験ができました。 ミドルウェアを自ら作り上げ、データをオンラインで移行し、運用を始めるというのはなかなか経験できないことだと思います。 サービスは以前より安定し、穏やかな年末を過ごしています。 今年は初めてカンファレンスで登壇しました。 慣れないことばかりで色々と戸惑いましたが、沢山の方に発表を聞きに来ていただいて嬉しかったです。 マネージドサービスを組み合わせて1つのソフトウェアを作り、それをサーバーレスミドルウェアとして抽象度を上げて捉えることができるようになったもの、このカンファレンスに参加してよかったことでした。 今年は19記事書きました。 特に、以下の記事は多くの方に読んでいただきました。 一年の後半にアウトプットが減速しているのは、カンファレンスの登壇に体力を使ってしまったこと、Prime VideoやAbema

    2017年を振り返って - プログラムモグモグ
    igrep
    igrep 2018/01/01