青ポスの部屋

旅と技術とポエムのブログ

20200911 免許更新

4年目にして初回更新者として初めて免許を更新した。

経緯

通常、免許証の有効期限はゴールドでない場合は「免許取得後3回目の誕生月」となる。2020年9月が誕生月の人が2020年12月に免許を取得した場合、期限は2023年の9月が期限となる。一般には3年と言われているが、厳密には3年よりやや短い。

免許を追加(併記)した場合、最後に併記した日から計算が始まる。先の人が2020年12月に普通免許、2021年12月に普通二輪免許を取得した場合、普通免許も併せて2024年9月が期限となる。

自分は普通免許、普通二輪免許、大型二輪免許を半年に一回のペースで取得した。なので期限は最初に普通免許を取得した日から3年弱、さらに併記したのでブルー免許であるのにもかかわらず、初回更新者講習を受けることになった。

bluepost69.hatenablog.com

bluepost69.hatenablog.com

bluepost69.hatenablog.com

講習の予約

大阪府民なのでおなじみ門真試験場で更新した。

ここでとても注意しないといけないのが、現在免許の更新手続きはコロナ禍で完全予約制となっていることだ。しかも果てしなく混雑しているので、一般更新者の土日や初回更新、違反者更新の場合は1か月先まで埋まっている。一般の平日でも数週間埋まっており、早く予約を取らなければ予約ができなくて失効という事態があり得る(もっとも、執行させてから1か月以内であれば学科や実技試験はなしで更新させてはもらえる)。

自分も可能な限り早く更新しようと思っていたのだが、7月末か8月頭にはがきが来て予約を取ろうとしたら9月頭まで予約が取れなかった。

流れ

時間の5分前くらいに到着したが、前倒しで入場できるようになっていた。入り口に大きく「11:15」と書いてあって、もっと早く着すぎた人は外のベンチで待っていた。

フロー自体は、経験した人ならおそらく変わっていないと思う。

  • 正面で申込書をもらう
  • 手数料を払う
  • 記入した申込書を出す
  • 適性検査(視力検査)を受ける
  • 暗証番号を機械で出す
  • 写真を撮る

ここで「12:20からの講習を受けてください」と言われ、15分くらい空き時間ができる。その間に昼食を取った。

講習の中身自体は、交通安全にかかわる一般的なことで、時勢からあおり運転の厳罰化の話とかがあった。ペットボトルのようなふたの閉まる容器に入った飲み物は途中で飲んでよいとのことだった。一番記憶に残ったことは、「大阪府下の標識には標識柱に番号が書いてあるので、通報するときは近くの標識の番号を伝えるとよい」ということだった。

初回の更新で少し緊張した*1が、問題なく自分が想定していた時間より早く終わった。3年後の次の更新まで無事故無違反だとゴールドになるので、安全運転に努めたいと思う。

最後に:毎度おなじみ環状交差点の話になったときに脳内で流れる曲

*1:特に最近は眼精疲労がひどく、視力が怪しいので「眼鏡等」がつかないか心配だった。だが適性検査は一発でクリアできたので、その瞬間一番安心した。

GitHub Pages + GitHub ActionsでCI/CDする

概要

Vue.js(Vue CLI)で作ったwebサイトをGitHub Pagesにデプロイし、GitHub Actionsで自動更新できるようにします。GitHubリポジトリはVueプロジェクトを管理するのに使い、pushされると自動でbuild、GitHub Pagesにデプロイするようにします。

プロジェクトの作成

GitHubリポジトリの準備

まずGitHubに空リポジトリを作成します。

https://username.github.ioのルートにデプロイする場合はusername.github.ioという名前で作成します。リポジトリ名を違うもの(例えばmyapp)にした場合はhttps://username.github.io/myappのようなURLにホスティングされます。また、この時READMEや.gitignoreを含まない(チェックを入れない)で、完全に空の状態で作成します。

vueプロジェクトの作成

次にローカルにvue-cliでcreateします。

vue create myapp

createしたプロジェクトのディレクトリに移動し、git remoteに追加します。

git remote add origin https://github.com/username/myapp

デプロイ用のキーを作る

Github Actionsでは仮想マシンを作成してリポジトリをcheckoutし、ビルドなどの処理をします。この時仮想マシンからcheckoutしたりpushするために、SSHの鍵ファイルを作ります*1

まずssh-keygenして鍵ファイルを作成します。

ssh-keygen -t rsa -b 4096 -C `git config user.email` -f myrepo_key -N ""

-Cにはgit config user.emailに設定してあるアドレスを入れます。PowershellのOpenSSHはNオプションに空文字列を指定できないので要注意です。自分はWSLのbashでやりました。

公開鍵のアップロード

GitHubリポジトリの「settings」->「Deploy keys」にアクセスし、右上の「Add deploy key」ボタンを押します。公開鍵(ssh-keygenで生成された.pubとついている方)の中身を全部コピーしてペーストします。

f:id:bluepost69:20200912215337p:plain
公開鍵のアップロード

シークレット

秘密鍵はsecret機能を使って渡します。

秘密鍵をどこかに簡単にアップロードするとか、ハードコードするなんてことは普通はしてはいけません。ですが、GitHubではsecretを使えば秘密鍵を公開状態にすることなく安全に渡すことができます。

docs.github.com

公開鍵と同じように、「settings」->「Secrets」で「New secret」から作成してペーストします(-----BEGIN RSA PRIVATE KEY----------END RSA PRIVATE KEY-----も含む全文)。

これでGitHub Actionsの仮想マシンからGitHubリポジトリにアクセスできるようになりました。

GitHub Actionsの設定

ここからGitHub Actionsのワークフローの設定に入っていきます。GitHub Actionsの基本は下記記事を見てください。

bluepost69.hatenablog.com

masterブランチに.github/workflows/ghpages.ymlを作成します。作成してcommitしてもかまいませんが、GitHubのActionsタブを押すとフォーマットから作成することができます。今回はNode.jsフォーマットから作成しました。メインの部分は下記になります。

    - run: npm ci
    - run: npm run build --if-present

    - name: deploy
      uses: peaceiris/actions-gh-pages@v3
      with:
        deploy_key: ${{ secrets.MY_ACTIONS_DEPLOY_KEY }}
        publish_branch: gh-pages
        publish_dir: ./docs     

追加したのはdeployステップです。ここでGitHub Pagesにデプロイするための公開されているworkflowを呼び出しています。uses文で既存workflowを再利用できます。withは引数のようなものです。publish_dir./docsを指定することで、buildしたあとにdocs以下に生成されるファイルをデプロイします。

github.com

Vue側の設定

vue.config.jsに下記のような設定を入れます。

module.exports={
    publicPath: "/URL",
    assetsDir: "static",
    outputDir: "./docs",
}

URLはhttps://username.github.io/にデプロイする場合は"/"を、それ以外のリポジトリの場合は/myapp/のようにします。

これで「masterブランチにpushやpull requestが来たら、仮想マシン上でbuildを行い、結果をgh-pagesブランチにpushする」というジョブが実行されます。

この後のGitHub Pagesの設定のために、先に一度pushしてジョブがちゃんと走るかチェックしておきます。こうすることでgh-pagesブランチが作成されます。

GitHub Pagesの設定

「settings」のGitHub Pagesメニューで「gh-pages」ブランチの「/(root)」を指定します。ディレクトリは/docsも選択できますが、現状はactions-gh-pagesがrootの場合しか対応していません。

gh-pagesブランチを手動で作成するとActionがうまく走りません。なので一度Actionを回してgh-pagesを作成してからPagesの設定を行います。

うまくいかないとき

404が出る

gh-pagesブランチのindex.htmlに直接コメントなどを書き込んでコミットすると直ることがあります。GitHub Pagesのバグらしい。

qiita.com

Vue-Routerで設定したアドレスにアクセスできない

Vue-Routerを使っている場合Router-linkを設定できるが、GitHub Pagesのルータの下でVue-Routerが動く形になるので、URLを直打ちしたり更新ボタンを押すと404が返ってきます。

回避する方法は、あるにはあるが「404ページをハックする」とか「静的ページにプリレンダリングしておく」とかで、あまりきれいにやる方法はないらしいです。

dev.to

参考サイト

sphinx-users.jp

*1:GITHUB_TOKENはprivate repositoryしか使えないらしい。

GitHub ActionでCI/CDする

概要

GitHub Actionで、特定リポジトリにコードがプッシュされたときにコンパイルするように設定する。

GitHub Actionとは

「特定ブランチにpushされたとき、これこれの処理を行う」といったイベント駆動の処理を実行できる機能。

使い方

今回はひとまずActionを回すということで、「masterにpull-requestが来たら、gfortranでコンパイルが通るかを確認する」というリポジトリを作る。

github.com

新たなアクションの設定

リポジトリ.github/workflowsの下にmyactions.ymlのようなymlファイルを記述する。

内容

onにイベント、つまり「xxが起こったら」を記述する。

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs以下に具体的な処理(job)を記述する。書かれた処理はすべて実行される。jobはstepに分けて書くことができる。

- uses: actions/checkout@v2という記述があるが、これは外部のActionを取り込む。「actions/checkout」とはサンプルっぽい文字列だが、下記のリポジトリにコードがある。

github.com

今回は「src/main.f90をgfortranでコンパイルする」ので、ステップに書き起こす。

- name: Run a one-line script
  run: gfortran -o dist/test.out src/main.f90

CIの実行

上記のyamlファイルをコミットして、masterにpull requestをすると、自動的にコンパイル処理が走り、pull request画面でその合否が表示される。

f:id:bluepost69:20200911215410p:plain

stepごとの状況やログも詳細に見ることができる。