Skip to main content

JetBrains系IDEでgithubにログインしたのにgithub tokenを要求される件の解消

· One min read

まとめ

  • githubにログインしたのに、特定リポジトリでgithub tokenを要求される場合がある
  • ただ単に特定のorgが intellij github plugin をgrantしていないことが原因
  • 以下の手順で対応可能
    1. githubにログインする
    2. githubの設定画面で、Applicationsを選択する
    3. Authorized OAuth Appsの中からJetBrains IDE Integrationを選択する
    4. 警告の出るリポジトリを保有するorgで Grantを選択する
    5. 場合によってはorgの管理者に許可をして貰う必要がある

JetBrains系IDEのためのエラーインライン表示プラグイン

· One min read

まとめ

すでにインストールしたgithub appsに権限を与えたのに403(permisisonがたりない)と言われる場合に確認すること

· One min read

まとめ

すでにインストールしているgithub appsのpermissionを変更しても403(permisisonがたりない)と言われる場合には一旦アンインストールして再度インストールすると権限が反映される。

手順

  1. github appsの詳細画面→Install Appから設定アイコンを選択
  2. 選択したappを該当のリポジトリからアンインストール
  3. 再度Install Appを選択した直して、リポジトリを選択してインストール

NextDNSを使ってみて広告ブロックが捗ったので紹介

· 6 min read

まとめ

  • NextDNSは数年前にリリースされたdnsサービスで、各種広告などをdnsレベルでブロックすることが可能
  • 個人的にここがすごいNextDNS
  • 設定しておいたほうが良いこと
  • 気をつけること
    • 一部自分の設定だと使えなくなる機能が存在した
      • googleの検索結果上位に現れる広告(検索連動型広告)をクリックしてもdnsエラー画面に飛ぶようになった
        • 表示自体はされるので、単純にリンクが不明というような状況になる
      • 一部のサイトでadblock利用判定がされるようになった
        • 現状の利用範囲ではbusinessinsiderにアクセスした際にadblock利用と検知された
        • adblockを検知すると消すように促すサイトも時たまあるため、気をつける必要がある
      • 一部のアプリ内広告が利用できない場合があった
        • 広告を見ることでゲーム内の通貨などを取得できる仕組みのあるような場合、これ自体が機能しない場合があった
      • アフィリエイトリンクが一部機能しなくなった
        • (意図通りではあるが)一部のアフィリエイトリンクが機能しなくなり、特に楽天などの紹介リンクから素直に楽天市場に遷移できなくなった
        • あまり楽天市場を利用しないのでそこまで問題にはならないが、忘れた際にDNSエラーになる
    • 最初30万クエリまでは無料だが、課金しないと途中から広告ブロック機能がなくなる
    • NextDNS側にはクエリされたログが残るので、そういったものを気にする場合は注意
    • 意図せずブロックされた場合にフィルタ設定などを見直す必要がある
  • 余談
    • 以前slideshareのスライドから広告を削除する拡張を書いたが、NextDNS.ioを使うことでブラウザ拡張を入れる必要がなくなった
    • chromeの拡張だとPCのみでしかカバーできなかったが、これをすることでスマホでも同等の広告フリーなslideshare体験を得ることができるようになった

ref

slideshareのスライド内広告を抑制するchrome拡張を書いた

· One min read

まとめ

intellij系のエディタを最新に上げたらでタブ移動コマンドが効かなくなって困った

· One min read

tl;dr

  • intellij系のエディタのタブの左右の移動のコマンドがあり、ブラウザと同様 cmd + shift + [cmd + shift + ] が振られている
  • intellijを最新版に上げたら、これらのコマンドが効かなくなって困った
  • 該当のkeymapを一旦削除してつけ直せば直る
    • select previous tabselect next tab が該当のコマンド

現在のタブをそのまま新しいウィンドウとして切り出すchrome拡張を書いた

· One min read

tl;dr

  • 現在の作業のタブを新しいウィンドウとして開いて作業を継続したい場合が多い
  • vimiumの shift + W コマンドで実現できるが、vimiumはgithubで様々なコマンドとの競合が発生するため使えない
  • 新しいタブを開いてウィンドウを切り出すだけのchrome拡張を書いた。これで快適

Refs

CircleCI設定の痛みをTypeScriptで解消するアイディア

· 8 min read

tl;dr

  • circleciのyamlを書く/メンテンするのは辛い
  • javascirpt objectをjs-yamlでdumpするようにすればtypescirptの補完が受けられる
  • typescirptの型生成の方法はいくつかありそうだが、現状仕様変更に追従するのが厳しそう

CircleCI設定の痛みをTypeScriptで解消するアイディア

CircleCIの設定ファイルcircle.ymlをメンテナンスすることは、往々にして難しいです。YAMLの書式に苦戦したり、JSON Schemaによる補完が十分ではない場合があります。この記事では、TypeScriptを使ってCircleCI設定の問題を解決する方法を紹介します。

YAMLの悩み

YAMLを直接書くことは煩雑で、アンカーを使って回避する方法も癖があります。また、JSON Schemaによる補完はある程度効果があるものの、十分強力ではないため、困難な状況がしばしば発生します。

circleci-config-sdk-tsの限界

circleci-config-sdk-tsは、CircleCIの設定を扱うための公式のライブラリですが、宣言的ではないため、思ったように書くことができません。

TypeScriptで解決

TypeScriptを使って以下の手順で問題を解決できそうです。

  1. TypeScript用の型を作成する
  2. 型に合致するJavaScriptオブジェクトを作成する
  3. js-yamlでJavaScriptオブジェクトをYAMLに変換する
  4. TypeScript用の型を作成する方法
  5. 型を作成するには、以下の方法が考えられます。

以下で実際に型を生成するアイディアをまとめます

JSON Schemaから生成する方法

JSON Schemaからtypescirptの型を生成するパッケージがあるため、それもとに生成することができます。

Chat GPTにconfig referenceから生成させる方法

config referenceを読ませて型を生成させる事もできます。

実際に生成させてみましたが、ある程度使えそうなものを出すことができました

出力例

実際の使い方

実際にconfig.ymlを作る場合は以下のように型を使えばいい感じに型チェックができます

import { type JSONSchemaForCircleCIConfigurationFiles } from "./types/circleci-config-types";
import { dump } from "js-yaml";
import fs from "fs";

const config: JSONSchemaForCircleCIConfigurationFiles = {
version: 2.1,
jobs: {
build: {
docker: [
{
image: "circleci/<language>:<version TAG>",
auth: {
username: "mydockerhub-user",
password: "$DOCKERHUB_PASSWORD",
},
},
],
steps: [
"checkout",
"setup_remote_docker",
{
setup_remote_docker: {
version: "20.10.18",
},
},
{
run: 'echo "this is the build job"',
},
],
},
test: {
docker: [
{
image: "circleci/<language>:<version TAG>",
auth: {
username: "mydockerhub-user",
password: "$DOCKERHUB_PASSWORD",
},
},
],
steps: [
"add_ssh_keys",
{
run: 'echo "this is the test job"',
},
],
},
},
workflows: {
version: 2,
build_and_test: {
jobs: ["build", "test"],
},
},
};

fs.writeFileSync("output.yaml", dump(config));

さらなる改善

今後の展望として、以下の改善が考えられます。

  • npm packageとして公開
  • Zodスキーマによる検証を追加
    • TypeScriptでは、min/max/regex/defaultなどの検証ができないため、Zodスキーマに変換したい(現状では適切な変換ができていない)
  • デフォルトの設定を自動生成させるようにしたい
  • GitHub Workflow/GitHub Actionsでも同様のことができるはず
    • actionlintのように、GitHub Actionsの独自構文内の諸々にも対応できると良いでしょう
    • 以上で、CircleCI設定ファイルの書き方やメンテナンスが、TypeScriptを利用することでより容易になります。

今回紹介した手法を活用することで、CircleCIの設定ファイルの管理がスムーズになり、エラーや誤りを減らすことが期待できます。

補足

以上の文章は適当にtl;drを作った上でchat GPTにだいたい書いてもらいました。いい感じの文章が出てきたので、ソレに適切にリファレンスを追加するだけで完了したので楽でした。

だいたいのプロンプト

https://mkusaka.com/ の文調を参考に、以下の概要を満たすようなブログを書きなさい

# tl;dr
## circleciのyamlを書く/メンテンするのは辛い
- yamlを生で書くのは辛い
- 回避するためのアンカーも癖がある
- json schemaによる補完もある程度効くが、そこまで強くないので困る事が多い
## [circleci-config-sdk-ts](https://github.com/CircleCI-Public/circleci-config-sdk-ts)があるが、宣言的ではないので思ったようにはかけない
## これらはtypescriptで補完させながら対応することで解消できそう
1. 何らかの方法でtypescript用の型を作成
2. 型に合致するようにjs objectを作る
3. js-yamlでjs objectをyamlに変換

### typescript用の型を作成する方法
- json schemaから生成する方法
- json schemaから型を生成し、それにマッチするようにjavascriptのobjectを書く
- chat gptにconfig referenceから生成させる方法
- config referenceを読ませることで型を生成させる

だいたい生成できた結果を載せる
- https://github.com/mkusaka/ciconfig
- https://www.typescriptlang.org/

## 次の1手
- zod schemaによる検証を加えたい
- typescriptだとmin/max/regex/defaultなどの検証ができないので、zod schemaに翻訳させたい(現状は適切な変換ができていない)
- デフォルトのものは自動で生成させるようにしたい
- 同じことをgithub workflow/github actionsでもできるはず
- actionlintのようにgithub actionsの独自構文内の諸々にも対応できると良さそう

tab shifterのvscode版コマンドメモ

· 2 min read

tl;dr

  • tab shifterの機能のうち、分割したwindow間でタブを移動する機能はvscodeが標準で提供している
  • macの場合は ctrl + cmd + → , ctrl + cmd + ← で、windowsの場合は ctrl + alt + → , ctrl + alt + ← で移動できる
  • 移動する以外の機能はないので、必要に応じて他の機能とくみあわせて使うこと

補足

  • 分割ウィンドウがない場合にウィンドウを新しく作成して、そこにタブを移動する 機能はないので、vimのコマンドと組み合わせている
    • vim で c-w c-s したあとに上記コマンドを実行するなど

参考