タグ

ブックマーク / songmu.jp (66)

  • Cloudflare PagesにそれなりにちゃんとBasic認証をかける | おそらくはそれさえも平凡な日々

    前回の、社内プライベートポッドキャスト実現方法で、ポッドキャストサイトを静的配信しつつBasic認証をかけるというアイデアを書いた。しかし、Basic認証などなかなか使わなくなり、ネイティブでサポートしている静的ホスティングサービスも少ない。今回はCloudflare PagesのFunctions機能でリクエストをラップするミドルウェアを書けば実現できることが分かり、その方式を採用することにした。多少実装必要になるのと、認証周りを自前で書くのはあまりやりたくはないが、廉価に比較的省力で実現できるので受け入れる。 ネット上にいくつかサンプルは見つかるが、今回実装するにあたっては以下の点を留意した。 コード内に認証情報を載せない 複数ユーザーのIDとパスワードを管理できるようにする パスワードは定数時間比較してタイミング攻撃を防ぐ これらを以下のように解決することとした。 認証情報は環境変数

    Cloudflare PagesにそれなりにちゃんとBasic認証をかける | おそらくはそれさえも平凡な日々
  • HonoとCloudflare Pagesでプロフィールサイト兼短縮URLサービスを構築した | おそらくはそれさえも平凡な日々

    関連: NFCタグ入りの自己紹介アイコンバッジを自作する song.mu という結構良い短いドメインを確保しているので、これをプロフィールサイト兼、個人用短縮URLサービスにしたいと長らく思っていたので重い腰を上げて作った。 最近オフラインイベントが増えている中で、こういうプロフィールサイトを活用しているケースを見るようになったのがきっかけ。Webエンジニアとしてはこういうの自作したいし、自分のドメインでホストしたいと思っていたのだ。 song.mu がリンクが並んだプロフィールページで、 song.mu/blog でブログに飛び、 song.mu/x でTwitterに飛ぶ、みたいな具合。 技術スタック こういうの作る時は興味がある技術の砂場にしたいので、HonoでSSGしてCloudflare Pagesでホストしている。ローカル開発でのTypeScript実行環境も mise で管理

    HonoとCloudflare Pagesでプロフィールサイト兼短縮URLサービスを構築した | おそらくはそれさえも平凡な日々
  • GoのテストをCIで簡単に並列実行する | おそらくはそれさえも平凡な日々

    https://github.com/Songmu/gotesplit gotesplitというかなり便利なツールを書いた。Goのテストをいい感じのサブセットに分割して、それを実行するものです。このアプローチで、社内のテストを15分から3分くらいまでに短縮しました。 これを使えばCI環境での高速なテストの並列実行を簡単に実現できます。 実例 CircleCIGitHub Actions上で簡単に導入できます。 CircleCIの場合 parallelism: 5 docker: - image: golang:1.15.3 steps: - checkout - run: command: | curl -sfL raw.githubusercontent.com/Songmu/gotesplit/main/install.sh | sh -s bin/gotesplit ./... -

    GoのテストをCIで簡単に並列実行する | おそらくはそれさえも平凡な日々
  • ヘンリーに入社しました | おそらくはそれさえも平凡な日々

    1月から株式会社ヘンリーに入社しました。ヘンリーは「社会課題を解決し続け、より良いセカイを創る」というミッションを掲げ、現在はHenryというレセコン一体型クラウド電子カルテサービスを主力として医療DXに取り組んでいるスタートアップです。 https://corp.henry-app.jp/ ヘンリーのことはあまり知らなかったのですが、ずっと一緒に働きたいと思っていたエンジニアの一人である縣さんが所属しており、今回私が転職活動を始めたのを彼が早々に察知して誘ってくれたのがきっかけです。 彼と話したところ、開発に色々課題は抱えつつも前向きに、楽しそうに働いていると感じたのが印象的でした。ナイスガイな彼がそれくらい魅力を感じているのであれば、良いチームで面白い社会課題を解いているだろうなと。 その後、2週間で様々なポジションの7名とお話しました。どの方もモチベーション高く、顧客や事業やプロダク

    ヘンリーに入社しました | おそらくはそれさえも平凡な日々
    fumikony
    fumikony 2023/01/16
  • tagpr を機能強化してv1.0.0をリリースしました | おそらくはそれさえも平凡な日々

    前回のtagprの紹介エントリの反響が思ったより大きくて喜んでいます。ということで、積み残し及び、要望やヒントから着想を得て幾つかの機能を追加実装しv1.0.0をリリースしました。 https://github.com/Songmu/tagpr/releases/tag/v1.0.0 ありがたいことに、public repoだけでも十数名の方に既にご利用いただいているようで、フィードバックから細かいエッジケースの修正も幾つかおこなって敲かれたため、だいぶ使い物になるソフトウェアになったと言って良いでしょう。 ということで、追加された機能等について解説していきます。 uses: Songmu/tagpr@v1 これまではワークフロー上で uses: Songmu/tagpr@main とブランチ直指定してもらっていましたが、uses: Songmu/tagpr@v1 と指定できるようになりま

    tagpr を機能強化してv1.0.0をリリースしました | おそらくはそれさえも平凡な日々
  • GitHubのリリースノート自動生成機能からCHANGELOG.mdを生成する | おそらくはそれさえも平凡な日々

    tl;dr GitHubのリリースノート自動生成のAPIを用いてkeep a changelog形式のCHANGELOG.mdを出力するツールを作った https://github.com/Songmu/gh2changelog gh2changelog -all -unreleased とかで出力 細かいオプションはヘルプ等を参照のこと ghchに引数体系は近いです GitHubには、リリースノートを自動生成する機能がある。これは、リリース間でマージされたpull requestのタイトルを一覧し、リリース項目としてGitHub Releases上に出力してくれるものです。リポジトリ上に.github/release.yml設定ファイルを配置すれば、pull requestの作者やラベルを元にグルーピングしたり非表示にするといった出力内容のカスタマイズもできる。 このあたりの実際の

    GitHubのリリースノート自動生成機能からCHANGELOG.mdを生成する | おそらくはそれさえも平凡な日々
    fumikony
    fumikony 2022/09/09
  • リリース用のpull requestを自動作成し、マージされたら自動でタグを打つtagpr | おそらくはそれさえも平凡な日々

    常々GitHubにtag requestが欲しいと言ってきましたが、それを実現するツールを作りました。OSSなど、バージョニングとリリースが伴うソフトウェア開発のリリースエンジニアリングをとにかく楽にしたいという動機です。既に自分が管理している幾つかのOSSでは導入して便利に利用しています。 https://github.com/Songmu/tagpr アイデア 基の発想は以下のようにシンプルです。 リリース用のpull requestがGitHub Actionsで自動で作られる バージョン番号が書かれたファイルやCHANGELOG.mdを自動更新 そのpull requestをマージするとマージコミットに自動でバージョンtagが打たれる semver前提 リリース用のpull requestを自動で作りマージボタンを以てリリースと為す、というのは、みんな(僕が)大好き git-pr

    リリース用のpull requestを自動作成し、マージされたら自動でタグを打つtagpr | おそらくはそれさえも平凡な日々
  • git-pr-releaseとGitHub Actionsでワンクリックデプロイを実現する | おそらくはそれさえも平凡な日々

    突然ですが、git-pr-releaseのなんちゃってコラボレーターである私が僭越ながら、その王道の使い方を皆様に伝授していきます。何番煎じかの記事ではありますが、現代の、特にGitHub Actions出現以降の使い方をまとめたいというのが動機です。 https://github.com/x-motemen/git-pr-release https://rubygems.org/gems/git-pr-release git-pr-releaseはGitHubを業務開発で利用している場合に便利なツールで、デフォルトブランチにマージされたpull requestをリリース項目として一覧し、それをpull request化してくれるものです。これにより以下のことが実現できます。 リリース項目が一覧されることによるリリース内容の明確化 マージボタンによる明快なワンクリックデプロイの実現 pul

    git-pr-releaseとGitHub Actionsでワンクリックデプロイを実現する | おそらくはそれさえも平凡な日々
    fumikony
    fumikony 2022/08/08
  • Montereyと(After)Shokzの相性問題とその解決方法 | おそらくはそれさえも平凡な日々

    macOSをMontereyにあげてからShokzの骨伝導ヘッドフォンが不調になる、具体的にはミーティング中に突然ミュートになるという問題がある。ボヤキや暫定解決方法含めてTwitter上に書き散らしていたが、困っている人が相変わらずいるようなのでまとめておく。と言っても、以下のredditに書かれている内容そのままです。 https://www.reddit.com/r/Zoom/comments/qhmpkg/aftershokz_aeropex_on_zoom_and_macos_monterey/ 自動音量調整が効いている場合それが悪さをする サウンド環境設定を開いて観察するとよく分かる マイク音量がどんどん下がっていってミュートされてしまう 音量自動調整を無効にすれば暫定解決 会議ツールの設定でそれができればOK (zoom等) 設定できない場合もChromeであれば以下の拡張を

    Montereyと(After)Shokzの相性問題とその解決方法 | おそらくはそれさえも平凡な日々
  • GitHubのissue searchには複数のSHAを指定できる | おそらくはそれさえも平凡な日々

    GitHubのissue search APIは、コミットハッシュ(SHA)を指定でき、そのコミットが含まれるpull requestを検索できます。7文字以上のHEX文字列を渡せば、それをSHAとみなしてくれる仕様です。 ref. https://docs.github.com/en/search-github/searching-on-github/searching-issues-and-pull-requests#search-by-commit-sha このとき、複数のSHAを検索文字列に渡すとOR検索の扱いになり、いずれかのコミットが含まれるpull requestをまとめて抽出してくれます。 これは、まだ明確にドキュメントされていませんが、GitHubのサポートに問い合わせたところ、「妥当な挙動である」と回答をもらいました。なので追加で、ドキュメントして欲しい旨も伝え、ドキュ

    GitHubのissue searchには複数のSHAを指定できる | おそらくはそれさえも平凡な日々
  • 体重体組成計を買い替えてSlack投稿を自動化した | おそらくはそれさえも平凡な日々

    だいたい以下の様な話です。 TANITAの体重体組成計を買った 100g単位で計測ができる ヘルスプラネットサービスでAPIから値の取得ができる https://www.healthplanet.jp APIクライアントを作った https://github.com/Songmu/healthplanet これは結局自動化のためには使わなかった 体重体組成計を買い替えた。元々TANITAのやつを10年以上使っていたが、最近脚が一つだめになってガタつくようになったので買い換えた。 減量のモチベーション維持のためもある。最近は計測値をiPhoneのヘルスケアに手動でちまちま入力していたが、その辺りを自動できて、APIで値が取れたりして、グラフ等で見やすくしたいとは常々思っていた。そして、最近社内に体重をシェアするSlackチャンネルが作られたのもあって、自動化モチベーションが更に高まっていたの

    体重体組成計を買い替えてSlack投稿を自動化した | おそらくはそれさえも平凡な日々
  • VPSを解約してFirebase Hostingにブログを移した | おそらくはそれさえも平凡な日々

    タイトルの通り。なんとなく自分のサイトを自分で運用したいと思っている。それはWebエンジニアとしてのポートフォリオ的な側面もあるし、それに加えて、自分の書いた文章を自分の管理下におきたい欲求があるのだと思う。 サブブログを、はてなブログに持っていますが(https://blog.song.mu)、これもまた、コンテンツはblogsync を使って管理しています。 このサイトはもともとVPS上のNginxから静的配信されており、 VPS上のgit bareリポジトリに直接push post-receive Hook で riji を呼び出してサイト再構築 という結構カッコいいフローを組んでいて 、これがなかなか気に入っていた。以下のような点が良かった。 国内のVPSへのgitリポジトリへのpushはかなり早い GitHubへのpushに少し引っかかりを感じるレベル とはいえコンマ数秒程度の違

    VPSを解約してFirebase Hostingにブログを移した | おそらくはそれさえも平凡な日々
    fumikony
    fumikony 2022/01/10
  • GitHub上でGoプロジェクトを正しくTransferする | おそらくはそれさえも平凡な日々

    tl;dr リポジトリを新オーナーにTransferする 返す刀でTransferしたRepositoryを元オーナー側にForkしもどす Forkしたものをアーカイブする Transfer先のモジュール名を変更し、新しいタグを打って開発を継続する GitHubのリポジトリのオーナー変更 この記事はGo Advent Calendar 2021カレンダー2の10日目の記事です。 さて、オーナー変更や個人プロジェクトをオーガニゼーションに移行したい等の理由で、GitHub上のリポジトリのオーナーを変更することがあるでしょう。 GitHubにはTransferring a repositoryの機能があり、それを使えば簡単です。issueやpull request等の履歴も含めて引き継いでくれますし、旧リポジトリから新リポジトリへのリダイレクトも自動的におこなわれます。なのでこれで解決なのです

    GitHub上でGoプロジェクトを正しくTransferする | おそらくはそれさえも平凡な日々
  • MacBook Proに復活したSDカードスロットでタイムマシンバックアップする | おそらくはそれさえも平凡な日々

    M1 ProのMacBook Pro '14を買いました。ちょうど業務PCとして買えるタイミングだったのでラッキーだった。多少トラブルはありますが、それも含めて楽しんでいます。 SDカードスロットが復活したことも話題でしたが、正直要らんなと思っていました。しかし @yamaz さんの以下のツイートを見て、確かにTime Machine運用するのは面白いかもしれない、と思ってやってみた。 なんでなんで!?みなさん、Timemachineのディスクは外付けのSDカードじゃないの?? https://t.co/YTj4QNixNm — 最速配信研究会 山崎大輔 (@yamaz) October 18, 2021 これまでTime Machineは自宅のQNAPに取っていたのだが、正直Time Machineが役に立ったことは全く無い割にはメンテナンスコストがかかっていたので微妙に思っていた。正直

    MacBook Proに復活したSDカードスロットでタイムマシンバックアップする | おそらくはそれさえも平凡な日々
  • 在宅ワーク環境を整備したのでアイテム紹介 | おそらくはそれさえも平凡な日々

    Launchableはフルリモートの会社であり、日にもUSにもオフィスは存在しない。前職では最終面接だったりハードウェアを扱っていたり、ということもあり、オフィスにそれなりに出社していたので、在宅環境をガッツリ整えてはいなかったのだが、これを機に整えた。一度やり始めると、火がついてしまって色々買い揃えてしまった。なので、それらを紹介していく。既にいろいろな人が書いているし、あまり目新しいことは無いとは思う。ちょっと力を抜いたアフィリエイトエントリです。 モニターアーム このエルゴトロンOEMAmazonベーシックのやつを友人から安く譲ってもらった。机にスペースができて大満足です。 使っている机が、クランプに必要なクリアランスが足りず、グロメットの穴あけが必要なので購入を躊躇していたのだが、このミニビットというやつが優れもので、ものの30秒で手動で真っ直ぐ机に穴を開けられたのである。これ

    在宅ワーク環境を整備したのでアイテム紹介 | おそらくはそれさえも平凡な日々
  • bashで配列の各要素を適切にクオートする | おそらくはそれさえも平凡な日々

    シェルスクリプトでラッパーを書くときに、exec "$@" とかよくやると思います。$@は特殊な変数で、クオートすることによって、配列の「各要素」が適切にクオートされて関数などに渡される。正確に言うとクオートされるわけではないのですが、要素に空白が含まれていてもばらばらにならないということです。 この振る舞いを普通の配列で実現するにはどうすればいいのか。これは、"$array[@]" のように添字に@を指定してやれば良い。これは配列が存在するbash限定の話です。 Shell Parameter Expansion に色々書いてあって学びがあるので読むとよいです。

    bashで配列の各要素を適切にクオートする | おそらくはそれさえも平凡な日々
  • Gitのワークフローについての私のスタンス | おそらくはそれさえも平凡な日々

    Gitのワークフロー、好みが分かれる分野で自転車置き場の議論にもなりがちだと感じている。基的にはプロジェクトの流儀に素直に従い、余計なストレスを抱えないのが良いと考えている。例えば、私はマージコミットを作るのが好みだが、OSS活動等では「squash & mergeして」って言われることもあり、そういうときは当然素直に従うようにしている。 ということで、私のGitのワークフローについてのスタンスについて書いておこうと思う。私と一緒に働く人や、働くことを検討している人の参考になればと思います。もちろん、この辺りは、良い方向に変化もさせていきたい。例えばエントリー内でも触れていますが、私は昔はforce pushを禁止したいくらいでしたが、今は使っても良い、と思うようになりました。 Natureの特にGoでのバックエンド開発はこれに近い感じだとイメージしてもらえればと思います。ただ、できてな

    Gitのワークフローについての私のスタンス | おそらくはそれさえも平凡な日々
  • 続・マンション購入記(売買契約から内覧まで) | おそらくはそれさえも平凡な日々

    前回、購入を決めたところまで書いたが、今回は家ができて内覧するところまで。 ローン審査と団信 前回通ったのは仮審査なので、次は売買契約と住宅ローン審査となる。 住宅ローンには団信(団体信用生命保険)というやつが含まれている。これは、人が死んだり、障害を抱えるなどして返済能力が無くなったときにローンの残債がチャラになるという強力な保険だ。それだけの優遇があるので、その分、ある程度健康であることが求められる。審査申込時に健康状態の記入項目がある。 それまでは比較的健康には自信があり、実際その前年までは健康診断で引っかかったことはなかった。しかし、前年から外的要因の変化が色々あり、体重増加等が気になってはいたのだ。 果たして、その年の健康診断は初めての再検査となった。LDLコレステロール値が正常値範囲外になっていたのだ。焦ってすぐに再検査を申し込み、再検査までの1ヶ月の間、酒を断ちジム通

    続・マンション購入記(売買契約から内覧まで) | おそらくはそれさえも平凡な日々
  • Let's Encryptのルート証明書切替周り(完結編) | おそらくはそれさえも平凡な日々

    tl;dr 驚くべきハックにより旧Androidも引き続き証明書エラーなくサイトを閲覧できそうです いよいよ5/4に標準の証明書チェーンが切り替わります 前回までのおさらい Android7.1以前でLet's Encrypt証明書のサイトが見られなくなる Let's Encryptの証明書切替周りその後 Let's Encryptはルート証明書を自身(ISRG)の認証局のルート証明書(ISRG Root X1)に切り替えようとしています。現在は、IdenTrustのルート証明書(DST Root CA X3)が使われています。 正確に言うと、ISRGは新しい認証局なのでそのルート証明書の普及率も当然低く、中間証明書はIdenTrustのルート証明書でクロスサインされており、それが標準で使われています。標準がDSTになっているだけで、ISRGのルート証明書のチェーンの証明書も指定すれば今で

    Let's Encryptのルート証明書切替周り(完結編) | おそらくはそれさえも平凡な日々
  • 同じソースツリーでテストが通っていたらテストをスキップする | おそらくはそれさえも平凡な日々

    tl;dr git rev-parse HEAD^{tree} でツリーオブジェクトのハッシュ値が取れるので、ブランチが異なる場合でも同じソースツリーであるかどうかを判定できます。 これを利用して、すでにテストを通ったtreeのハッシュ値をどこかに記録しておいて、同一のソースツリーに対するテストをスキップできます。 題 よく使われている、develop/mainブランチ運用をしている場合に、ちょっとした修正を番に入れたい場合には以下のようなフローを踏むことになるでしょう。 featureブランチをdevelopブランチの先頭から切って修正を作ってテストが通るのを待つ developブランチにfeatureブランチにマージしてテストが通るのを待つ mainブランチにdevelopブランチをマージしてテストが通ったらdeployする さて、この時、他の作業が混ざらない限りにおいては1,2,

    同じソースツリーでテストが通っていたらテストをスキップする | おそらくはそれさえも平凡な日々