Github Actionsのワークフロー内でGithub Appからトークンを取得して使う

Github ActionsでGithubトークンを使う場合、自動的にGITHUB_TOKENというシークレットが作られる。このトークンでは権限が足りない、というような場合は別にトークンを用意する必要がある(自分の場合だと、他のリポジトリにコードをPushしたりPullRequestを作る用途で使っている)。誰かのパーソナルアクセストークンを使う必要があると思っていたけど、Github Appを用意して、ワークフロー内でそのAppからトークンを取得して使うことができるということを知った。

使うのは https://github.com/tibdex/github-app-token 。Example Workflowの通り、GithubAppのAPP IDとPRIVATE KEYをSecretに登録して指定するとトークンを取得してくれる。

jobs:
   job:
     runs-on: ubuntu-18.04
     steps:
       - name: Generate token
         id: generate_token
         uses: tibdex/github-app-token@v1
         with:
           app_id: ${{ secrets.APP_ID }}
           private_key: ${{ secrets.PRIVATE_KEY }}
           # Optional (defaults to the current repository).
           # repository: owner/repo
       - name: Use token
         env:
           TOKEN: ${{ steps.generate_token.outputs.token }}
         run: |
           echo "The generated token is masked: ${TOKEN}"

チームで使うリポジトリだと、自分のトークンを使わない方がよいこともあるだろうから覚えておくと便利そう。

CloudNativeDays Spring 2021でカンファレンスプラットフォームを開発した

2020年3月11日〜2020年3月12日に開催されたCloudNative Days Spring 2021 Onlineの実行委員会として、カンファレンスプラットフォームの開発に関わりました。今回は従来のRailsにReactとTypeScript・Next.jsを追加し、ウェブフロントエンドの体験を向上させたのですが、React・TypeScriptに入門できたのが個人的には大きな収穫でした。

Continue reading →

3Dプリンターでヘッドホンフックを自作したんだけど、滅茶苦茶楽しい!!

先日、思い立って3Dプリンターを買っていろいろプリントしていたんだけど、自分でヘッドホンをデスクにひっかけるためのフックを作ってみた、という話です。こういうやつ。

そもそも、10月に3Dプリンターを買っていた。

最初はthingiverse にアップロードされている既存のモデルを印刷していたのだけど、自分の家にフィットするものを作りたくなったので自分でモデルも作ってみることにした。

とはいえ、何もない状態からモデルを作るのはハードルが高かったので、既存のモデルを参考にしつつ作業した。選んだモデルはこれ

https://www.thingiverse.com/thing:411962

3Dモデリングには 3D Shapr を選んだ。iPadとApplePencilを使ってモデリングできて、知識ゼロでもなんとなく使えたのでこれにした。Fusion360のようなmacOSで使えるソフトウェアもあるが、いまいち使い方がわからなかった。3D Shaprは月額制のサブスクリプションで結構高いのだが、学習と思って今のところ支払っている。そのうちFusion360とかに移行できるといいなと思う。

試作1号機

最初に作ったのがこれ。直方体をつなげただけ。ダサい。

しかし、ヘッドホンフックとしては一応機能する。ダサいけど。

試作2号機

2号機。工夫した点はサポートするための支え?の追加と、プレートの先の部分を細くしてスマートにした点。

これは結構いい感じだが、ヘッドホンが机の外側にはみ出ていると邪魔では?というコメントをもらった。

試作3号機

3号機。デスクの下に収まるように設計してみた。

ヘッドホンの位置はバッチリだが、机への取り付け部分のサイズが甘くスカスカになってしまった。

完成品

これが完成形。3号機とほぼ同じで、寸法の微調整をした。

デスクの天板の高さにぴったりでめちゃ良い。

さらに、たまたま手元にあったパーマセルテープを貼って外れにくくした。

終わりに

3Dプリンター、面白い。ぶっちゃけヘッドホンフックとか買った方が早くて、自分で作るのって車輪の再発明みたいなものなんだよね。でも、自分が使うものを自分のために自分で作るという点についてはソフトウェア開発に通じるものがあって楽しい。そのうち、探してもないものを作るように慣れればいいなと思う。

しかし、モデルを作るのが難しい。3DShaprはかなり直感的に扱えるけど、それでも「こういう操作をしたらこうなりそう」というiPad的な感覚とは離れている箇所もある。

CloudNativeDaysTokyo2020でカンファレンスプラットフォームを開発した

9月8日と9月9日に開催されたCloudNative Days Tokyo 2020の実行委員として、カンファレンスプラットフォームを開発しました。とても楽しく、良い経験ができました。

もともと、実行委員としては去年の末ごろから参加して準備を手伝っていました。その時の主な担当はウェブサイトで、Hugoで作ったりしていた。あとはコンテンツ周りも関わっていたかな。

これまでカンファレンスで登壇はしてきたのですが、開催する側はやったことがなかったんですね。ミートアップくらい。なので、開催する側もやってみたくて参加ました。

結果として、これまでのオフラインイベントの開催は体験できませんでした。しかし、オンラインカンファレンスという新しい体験に関わり、とても楽しく良い経験ができました。

cndt2020は去年と同様オフラインイベントの予定だったのだけど、新型コロナウイルスの流行により、オンラインイベントに変更しました。そして、オンライン化にあたり配信などをどうやるかが課題となりました。

いくつかのサービスを検討したが、結果としては自分たちで作る決断をし、自分は決断した後、7月ごろから開発に参加しました(雑誌の執筆でバタバタしていた)。

技術スタックとしてはRailsとHeroku、Auth0、Vimeo、sli.doを使用。時間もあまりなかったので、外に出せるものは出した。そのため技術的にめちゃくちゃ難しい、というものはそこまでなくて(websocket周りの経験が無かったくらい?)、素朴にモデル設計やUIをどうやるかというところが難しかった。

開発メンバーはメイン2名、スポットで時々参加する人が数人で、デスマーチではないがやや大変だったかなという印象です。

カンファレンスプラットフォームとして大事にしたのは使い勝手で、プレイベントのrejektsで分かったUIの問題などを本番までに改修できたのはよかった。

本番のイベント中は負荷の監視をしたり参加者のフィードバックやアイデアを実装、デプロイしていました。素早い対応ができたのは自前実装の利点ですね。

今後、カンファレンスで同じプラットフォームを使うとなると破壊的変更が難しくなるので、エンジニアリングとしても難易度は上がりそう。UIをよりよくするためにはReactやVueのようなフロントエンドフレームワークが必要かもしれないという話をしていて、ここは新たなチャレンジじゃないかなと思います。

UserScriptを使って、Confluenceエディタのショートカットを一部無効にする

僕は日本語のかなに切り替える際、Ctrl-Shift-jを使っている。Ctrl-Shift-k、英字なら Ctrl-Shift-;だ。かな・カナ・英字を瞬時に切り替えられてとても便利なのだけど、最近Confluenceを使い始めて困ったことが発生した。それは、 Ctrl-Shift-jのショートカットがConfluenceのエディタにもあり、かなに切り替えるとエディタ側のショートカットも発動してしまうのだ。ショートカットとしてはJiraのチケット検索ダイアログを表示するというもので、これはこれで便利なのだけど僕としてはかな切り替えの方が優先順位が高い。複数のマシンでCtrl-Shift-jをかな切り替えに使っているし、そこは譲れない。

Confluence側の設定でショートカットを無効にできればよかったけどどうもそうはいかないようだったので、10年ぶりくらいにUserScriptを書いて制御することにした。

// ==UserScript==
// @name        Disable ctrl+shift+j in Confluence editor
// @namespace    http://repl.info/
// @version      0.1
// @description  Disable ctrl+shift+j in Confluence editor
// @author       Ryo Takaishi
// @include */editpage.action?*
// @include */createpage.action?*
// @run-at document-idle
// @grant        none
// ==/UserScript==

document.addEventListener('DOMNodeInserted', function() {
    if (tinyMCE) {
        if (tinyMCE.activeEditor) {
            tinyMCE.activeEditor.shortcuts.remove("ctrl+shift+j");
        }
    }
}, false);

tinyMCEを使っているので、このようにショートカットを削除すればOK。JavaScriptを知っているとこういうちょっとした改善をシュッとできるので便利ですね。