Hiroto's diary

プログラミングとか色々

GitHub Actions で特定の OS の時のみ実行するスクリプトを切り替える

テスト時の必要なパッケージのセットアップ等で OS 毎に実行するスクリプトを切り替える必要があり, 色々と調べたので書き残します。

GitHub Actions では標準で Windows Server 2019, Ubuntu 18.04, 16.04, macOS Catalina 10.15 が使えます。 (2019/12/18 現在)

help.github.com

CI の際に, OS により実行する事が違う場合が多々ありますが, GitHub Actions では YAML ファイル内で簡単に分岐できます。

OS の切り替えに限らず, 特定の条件のみ実行する場合は jobs.<job_id>.if でコンテキストを使って分岐します。 変に説明するよりも見たほうが早いので, 例を貼り付けます。 以下は Linux (ubuntu-latest) の時は apt, macOS (macos-latest) の時は brew を使い, zsh をインストールする例です。

name: CI

on: [push]

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
        node-version: [12.x]

    steps:
      - uses: actions/checkout@v1

      - name: Use the Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}

      # Linux の時のみ, apt で zsh をインストール
      - name: Install zsh on ubuntu-latest
        if: runner.os == 'Linux'
        run: |
            sudo apt update -y
            sudo apt install -y zsh

      # macOS の時のみ, HomeBrew で zsh をインストール
      - name: Install zsh on macos-latest
        if: runner.os == 'macOS'
        run: |
            brew update
            brew install zsh

runner.os で現在のジョブで実行されてる OS の取得が出来ます。 取得できる文字列はLinux, macOS, Windows です。

if で書く OS 名はシングルクォートで囲う必要があります(ダブルクォートだと Your workflow file was invalid: The pipeline is not valid., Unexpected symbol になります)。

分岐条件が複数ある場合は && で繋ぐだけです。

# os が macOS かつ, イベントが pull_request
if: runner.os == 'macOS' && github.event_name == 'pull_request'

Node.js のバージョン切り替えで使っている matrix.node-version や, ジョブの状態を取得する job.status などもコンテキストの一つですので if に使えます。

その他のコンテキストは GitHub ヘルプから参照できます。

help.github.com

Travis CI のようにジョブの情報が環境変数に入っていてシェルスクリプトの中で分岐するのは, シェルスクリプトにあまり慣れてない人(僕)が触るとまあまあ最悪なので, YAML ファイル内で簡単に分岐出来るのはありがたいですね。

iOS の Spotify で曲やアーティストを Twitter で共有する時に曲名やアーティスト名を入れる

iOSバイスSpotify を使ってる方は分かると思いますが, iOSSpotify で曲やアーティストを Twitter で共有すると, なぜか曲名やアーティスト名はツイートされず, URL だけがツイートされます。 PC では曲名もアーティスト名もツイートされるのに何故か iOS ではこの仕様。

公式クライアントでツイートを見る分にはアーティスト名なり曲名が分かるのでまだ良いですが, 非公式クライアントではただ URL が表示されるだけでめちゃくちゃ不便です。

これの解決方法は Safari などの外部ブラウザで開いてブラウザの共有機能でツイートする等がありますが, iOS のショートカットで実現したほうが手っ取り早い ので, 作ってみました。

事前にショートカットのアプリと Twitter の公式クライアントのアプリをインストールしてください。

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料
apps.apple.com

作成手順は以下の通り。

  1. ショートカットのアプリを開く
  2. ショートカットを作成 を選択
  3. 変数を設定 アクションを挿入
    • 変数名は何でもいいですが, ここでは url で設定。
  4. 名前を取得 アクションを挿入
  5. テキスト アクションを挿入
    • キーボードの上に出てくる, 名前 (URL 先のタイトル)と, 先程設定した変数の url を使用。
  6. ツイート アクションを挿入
  7. 画面上のショートカットの設定 (完了ボタンのすぐ下) をタップ
    1. ショートカットの名前を設定。
    2. 共有シートに表示をオン に。これをしないと Spotify の共有からこのショートカットが使えない。
    3. 受け入れの種類を選択。一旦全ての選択を解除して, URL だけを選択 します。

完成すると以下のような感じに。

f:id:Hiroto-K:20191021000303p:plainf:id:Hiroto-K:20191021000309p:plain

最後に Spotify 側で確認。

  1. 曲やアーティストのシェアするからその他を選択し, 一番下にショートカットが出るのを確認
    • 出ない場合は一番右のその他からショートカットを入れる
  2. ショートカットを選択して, 先程作成したショートカットが出るのを確認
  3. 作成したショートカットを選び, ツイート画面が出るのを確認
f:id:Hiroto-K:20191021001432p:plainf:id:Hiroto-K:20191021001440p:plain
f:id:Hiroto-K:20191021001448p:plainf:id:Hiroto-K:20191021001455p:plain

以上で曲名とアーティスト名を挿入してツイートできます。

こんなのをユーザー側がやるのもアレなので, Spotify 標準の Twitter 共有で曲名とアーティスト名も入れるようにしてほしいですね。

© 2015 Hiroto-K