不要なGitHub Actionsのキャッシュを簡単に削除できるtoshimaru/delete-action-cacheというActionを作った。
GitHub Actionsのキャッシュの保持容量は10GBまでという制限がある。
GitHubは、7日間以上アクセスされていないキャッシュエントリを削除します。 保存できるキャッシュの数に制限はありませんが、リポジトリ内のすべてのキャッシュの合計サイズは制限されています (最大 10 GB)。
ref. 依存関係をキャッシュしてワークフローのスピードを上げる - GitHub Docs
キャッシュが超過している・超過しそうだと下記のような警告が表示される。
Least recently used caches will be automatically evicted to limit the total cache storage to 10 GB. Learn more about cache usage.
比較的小さいプロジェクトであれば、この制限に引っかかることは少ないだろう。
しかし下記のようなケースで、この10GBという制限が足かせになることがある。
10GBを超えると古いキャッシュから削除されていくため、キャッシュスラッシングが発生してビルドが遅くなったり、場合によってはビルドが壊れることもある。
最近だとこちらの記事が話題になっていた:やんないほうがいいかも、GitHub Actions の setup-xxx での依存キャッシュ保存 - 誰かの役に立てばいいブログ
そういった問題を解決するため、不要なGitHub Actionsのキャッシュを簡単に削除できるActionを作った。
toshimaru/delete-action-cache: Delete GitHub Actions Cache with ease.
具体的には下記のようなことが簡単にできるようになる。
workflow_dispatch
イベントをトリガーに、特定ブランチのキャッシュを削除schedule
イベントをトリガーに、特定ブランチのキャッシュを削除今回のActionを作るにあたり、下記のような工夫をした。
r7kamura/bump-requestを使い、workflow_dispatch
からPRマージでリリースできるように自動化を行った。
リリース自動化に関してはbump-requestの作者が解説記事を上げているので、そちらを参照するとよい。
GitHub Actions には v1.1
, v1.2
, v1.3
… のようなリリースを v1
とメジャーバージョンに丸めて扱う慣習がある。
このへんのリリースは actions/checkout でやっている半自動アプローチを採用した。手動でworkflow_dispatch
からリリース対象バージョンとタグを指定してリリースする方法である。
詳しくは下記の.github/workflows/update-main-version.yml
ワークフローの内容を参照するとよい。
checkout/.github/workflows/update-main-version.yml at main · actions/checkout
もしGitHub Actionsのキャッシュ容量制限にお困りの方はお試しください。
このActionを作るにあたり、gh cache list
コマンドにオプションが欲しくなったので、付けておいた。
gh cache list
by toshimaru · Pull Request #8667 · cli/cliref
option to gh cache list
by toshimaru · Pull Request #8711 · cli/cli`gh cache list` コマンドに ref オプションも足したぞい! » Release GitHub CLI 2.45.0 · cli/cli https://t.co/4mtappf4UP https://t.co/lcJJw0AvjF
— toshimaru (@toshimaru_e) March 5, 2024
GitHub Actions のワークフローの実行ログを削除するGitHub CLI 拡張機能、gh-workflow-log-cleaner を作成したのでご紹介。
toshimaru/gh-workflow-log-cleaner: Clean outdated workflow logs.
古いGitHub Actionsのワークフロー実行ログは残り続ける。現役バリバリで利用しているワークフローならいいが、既に使用していないワークフローの場合、このログがノイズになることがある。
GUIでポチポチ実行ログを削除することは可能だが、まとめて削除する方法は提供されていない。代わりに公式ドキュメントでは、Bashプログラムで削除する方法が紹介されているが、やや面倒でカジュアルには実行しにくい。
ということで、GitHub CLI 拡張機能化しカジュアルに実行できるようにしてみた。
GitHub CLI の拡張機能は、大きく下記の2つの方法がある。
ref. Creating GitHub CLI extensions - GitHub Docs
今回はBash方式で作成した。下記のコマンドで拡張機能をイニシャルセットアップできる。
$ gh extension create EXTENSION-NAME
--limit
オプション)gh-
で始まる必要があるgh extension search
で検索機能にするためには、gh-extensionというトピックを設定する必要があるGitHub公式が出している issue-metrics Actionをご紹介。
GitHubのデータで開発生産性を計測したい。いわゆるFour Keys メトリクスを計測したい。
しかし、開発生産性を計測するにはGithub Insightの機能はあまりにも貧弱だ。
そんな折にGithubから開発メトリクスを計測する公式Actionが出ていたので試してみた。
リポジトリ名にIssueと付いているので、Issueに関するメトリクスを計測するものかと勘違いしてしまいそうになるが、Pull Requestに関するメトリクスも計測することができる。
具体的には下記の項目を出すことができる。
公式のREADMEに掲載されたUsageの設定だと前月データ決め打ちになっているので、Year-Month を指定してworkflow_dispatch
イベントで実行できるように改修したものが下記:
repo:your-org/repo-name
の部分は計測したいリポジトリ名に置き換えること。
# .github/workflows/monthly-metrics.yml
name: Monthly Pull Request metrics
on:
workflow_dispatch:
inputs:
year:
description: "Enter the year (e.g. 2023) for which you want to collect metrics"
required: true
type: number
month:
description: "Enter the month (1-12) for which you want to collect metrics"
required: true
type: number
permissions:
issues: write
pull-requests: read
jobs:
build:
name: pull request metrics
runs-on: ubuntu-latest
steps:
- name: Get dates for specified year and month
shell: bash
run: |
# Get the specified year and month from the inputs
year=$
month=$
# Calculate the first day of the specified month and year
first_day=$(date -d "$year-$month-01" +%Y-%m-%d)
# Calculate the last day of the specified month and year
last_day=$(date -d "$first_day +1 month -1 day" +%Y-%m-%d)
# Set an environment variable with the date range
echo "$first_day..$last_day"
echo "selected_month=$first_day..$last_day" >> "$GITHUB_ENV"
- name: Run issue-metrics tool
uses: github/issue-metrics@v3
env:
GH_TOKEN: $
SEARCH_QUERY: "repo:your-org/repo-name is:pr created:$"
- name: Create issue
uses: peter-evans/create-issue-from-file@v5
with:
title: "Monthly pull request metrics report ($)"
token: $
content-filepath: ./issue_metrics.md
下記のようにActionsページからポチポチで対象年&月を指定して実行でする。
作られたメトリクス結果のサンプルは下記:
Github Pull Request の簡易的なメトリクスを振り返るのに issue-metrics は便利。
一方で、GitHub公式の機能として Four Keys っぽいものをリアルタイムで確認できるような機能が欲しいぞ。GitHub殿、よろしく頼む。
]]>RubyKaigi 2024に参加して、そのアフターイベントであるRubyKaigi 2024 Wrap Party にて『RubyKaigiのプロポーザルを通したい。 』という発表をしました。
久しぶりにRubyKaigiに参加してみて、RubyKaigiは素晴らしいイベントだと感じたので、RubyKaigiのカンファレンスとしての特殊性に触れつつ、プロポーザルを出してみたいと思っている人に参考になる情報が発信できたら、と思い今回の発表をしました。
発表の中でも言及しましたが、RubyKaigiはRubyを作っている人たちのためのイベント です。
一方、普段僕が仕事の中で最も書いているのはRuby on Railsのコード。そんな僕にとって RubyKaigi というイベントは<登壇する場>という意味においては “Not For Me” なイベントだと感じていました。
ただ今回、数人の知り合いがRubyKaigi登壇しているのを見る中で、僕もこんな素晴らしいイベントで話してみたいなぁという思いが強まりました。
Matzさんもよく「RubyKaigiは特殊なイベントだ」という風におっしゃっていて、最初僕はその特殊性についてピンときていませんでした。
ただ下記の@a_matsudaの資料を読み込むうちに、松田さんがRubyKaigiに掛けている情熱、何を大事にしてRubyKaigiを運営されているか、RubyKaigiの唯一無二性を紹介したいと思いました。
RubyKaigiにプロポーザル出してみようと考えている方の刺激になった、という声をいただけたのは良かったです。
最近オフラインの勉強会にちょくちょく顔を出しているのですが、やっぱりオフラインの勉強会はいいなって思います。
エンジニヤー、コロナ禍で相当勉強欲が満たせず鬱憤が溜まってたのか、大体どの勉強会も盛況だしLT発表枠も埋まっとる。首都圏だけでなく、地方の勉強会コミュニティも活発なのはいいですね。
— toshimaru (@toshimaru_e) May 31, 2024
最近オフラインの勉強会に数回出て思うのは、やっぱり求めてるのはこういうのなんだよ、こうゆうの〜、って感じになってる。
— toshimaru (@toshimaru_e) June 18, 2024
オンライン勉強会では感じ取れない「熱」がそこにあるんですよね 🔥。そして登壇する側としても衆人環視の中、適度な緊張感がありそれがまた良い。
あと個人的に勉強会の参加意義の半分くらいは、そのあとの懇親会とかカジュアルトークにあると思っていて、そこでするディープな<現場トーク>であったり世間話が自らの刺激になったり、知見になったりする。
「あの発表良かったです〜」「あの記事参考にさせてもらいました〜」みたいな言葉をダイレクトにいただけるのはアウトプットの源泉・モチベーションになるんですよね。
発表後に「プロポーザルネタはなんかあるの?」って聞かれたんですが、正直言うとコレといったものはありません。笑
ただ、RubyKaigi参加後、間違いなくコントリビューション欲は出たので、Rubyのエコシステムへの貢献度は増やしていきたいなって思った次第です。
コントリビューションする中で結果として、RubyKaigiプロポーザルネタが見つかるといいなと思っています。その結果プロポーザルのネタが見つからなかったとしても、自らの行ったコントリビューション自体は消えずに残り続けるので、それはそれとしてやっていきたいと思います。
]]>静的なサイトのHTMLをminifyするには、wilsonzlin/minify-htmlを使うのが良かった。
このブログの静的HTMLはJekyllによって生成されている。Jekyllで生成されているHTMLをminifyしてHTMLサイズを小さくしたい。
最初はjekyllのプラグインでminifyできないかを考えたが、下記の理由につき断念。
結局のところSSGは静的サイトを吐き出しているだけなので、吐き出した結果のHTMLを後処理としてminifyできればOK。
ということでそういう用途であればwilsonzlin/minify-htmlが良さそうなことがわかった。
決め手となったポイントは下記。
GitHub Actionsを使ってこのサイトはデプロイしているので、デプロイのビルドステップにて minhtml
をかますようにすればOK.
具体的には、jekyll build
した後にminhtml
のリリースバイナリを取得し、静的データが格納されているディレクトリ(_site
)に対してminify処理を施す。
GitHub Actionsのビルドステップは下記のようになる。
- name: Jekyll Build
run: bundle exec jekyll build
env:
JEKYLL_ENV: production
- name: minify HTML
run: |
wget -O minhtml -q https://github.com/wilsonzlin/minify-html/releases/download/v0.15.0/minhtml-0.15.0-x86_64-unknown-linux-gnu &&
chmod +x minhtml &&
./minhtml --do-not-minify-doctype --keep-spaces-between-attributes --ensure-spec-compliant-unquoted-attribute-values _site/**/*.html _site/*.html
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
そのままだと、The W3C Markup Validation Serviceで検証すると不正なHTMLが出力されるので、下記のオプションをつける必要があった。
--do-not-minify-doctype
--keep-spaces-between-attributes
--ensure-spec-compliant-unquoted-attribute-values
SSG(静的サイト生成)で生成したHTMLをminifyするには、wilsonzlin/minify-htmlが便利だった。
]]>PHPerKaigi 2024で「10年モノのレガシーPHPアプリケーションを移植しきるまでの泥臭くも長い軌跡」というタイトルで発表しました。
※ブログのリニューアル作業を優先して進めていたら、記事の公開がだいぶ遅れてしまいました💦
話した内容を一部抜粋して、記事の形で紹介します。
アプローチ | 家で例えると… | 説明 |
---|---|---|
リファクタリング | リノベーション | Legacy App をコンバートリファクタリング |
マイグレーション | お引越し | Legacy App → New App ヘマイグレーション |
リプレイス | 作り直し | Legacy App を全廃棄、New App をフルスクラッチ |
削除 | 解体 | Legacy App を削除 |
✅ レガシー化する前の健全なシステムであれば有効なアプローチ
(※レガシー化した後では「手遅れ」なケースが多い)
✅ 安全性・速度・柔軟性ともにバランスのとれたアプローチ
✅ 成功させれば一撃必殺となるハイリスク・ハイリターンなアプローチ
✅ これができれば最高なアプローチ
(※現実的には全て削除は不可能で、部分的な削除になることが多い)
リニューアルできるのであれば、さっさとリニューアルするのが吉…だけど、実際はそう簡単にリニューアルはできないので、現行の仕様を踏襲しつつ移植するのが現実的な落とし所になりがち。
<技術的負債返済プロジェクト>が必要になるまで技術的負債を放置しない!
技術的負債自体は健全な開発チームにあって当然のこと。恒常的な負債返済サイクルが回っていないことが問題なので、普段から技術的負債の返済は心がける。
rspec --format documentation
でドキュメント出力し、テスターに渡しておくと、仕様の理解促進やテスト実施項目の削減にもつながって◯org:{your-org} NOT is:archived {unused_code}
採択されたのでこちら来年のPHPerKaigiで話す予定です。PHP系イベントは初登壇なので楽しみ | 10年モノのレガシーPHPアプリケーションを移植しきるまでの泥臭くも長い軌跡 by toshimaru | プロポーザル | PHPerKaigi 2024 #phperkaigi - https://t.co/02AzYAG3cT https://t.co/GNBuf3EPzn
— toshimaru (@toshimaru_e) December 7, 2023
雑に社内研修用の資料を作り始めようと思って、デフォルトテーマが味気ないので Azusa 使うことにした。日本語環境でも大体いい感じになって素晴らしい » Azusa 3 - 大体いい感じになる無料Keynote・Googleスライドテンプレート https://t.co/v9M7guCpNw
— toshimaru (@toshimaru_e) December 12, 2023
#phperkaigi で発表する予定の資料チラ見せします! 技術的負債解消に興味ある人は遊びにきてね〜(2024/03/08 10:40〜 Track B)https://t.co/GNBuf3EPzn pic.twitter.com/4mUJXGDWLt
— toshimaru (@toshimaru_e) March 4, 2024
#phperkaigi このあと Track B で発表予定の資料を公開しておきました! // 10年モノのレガシーPHPアプリケーションを移植しきるまでの泥臭くも長い軌跡 / legacy-php-app-migration https://t.co/H6LY27egys
— toshimaru (@toshimaru_e) March 8, 2024
#phperkaigi CLI, golangで作るとシングルバイナリで配布が簡単でいいよね。同じ理由でRustで作るのも便利。
— toshimaru (@toshimaru_e) March 8, 2024
#phperkaigi 発表終えたのでお先に酒クズします。アルコールとおつまみがデプロイされているのありがたし〜🙏
— toshimaru (@toshimaru_e) March 8, 2024
#phperkaigi Rubyコミュニティの人たちがいらっしゃったので、PHPコミュニティでRubyコミュニティの談笑をするなどした
— toshimaru (@toshimaru_e) March 8, 2024
#phperkaigi #d PHPer実行委員, キャラ立ちしている人が多くていい😇
— toshimaru (@toshimaru_e) March 8, 2024
女もすなるネイルといふものを、男もしてみむとてするなり#phperkaigi pic.twitter.com/SWc34e6KTa
— toshimaru (@toshimaru_e) March 8, 2024
🍺のPush通知は最高でした#phperkaigi
— toshimaru (@toshimaru_e) March 8, 2024
#phperkaigi お疲れ様でしたー!普段かかわらないコミュニティの方の話を聞いたり、懇親会でいろいろ話せて良かった〜
— toshimaru (@toshimaru_e) March 9, 2024
道産子だけどしっかり北海道にもITコミュニティが根付いてることが確認できたのは良かった
— toshimaru (@toshimaru_e) March 9, 2024
speakerdeckのTranscript文字化け問題困っていたけどこの方法で治った。ただ Preview App がPostScriptに対応しなくなったので、brewで入るghostscriptが必要 » Keynote で作成したスライドを Speaker Deck にアップロードすると Transcript が文字化けする問題への対処法 https://t.co/Zv0P5fp5yt
— toshimaru (@toshimaru_e) March 9, 2024
#phperkaigi スピーカーとしてプロの声優さん(小桜エツコさん)のアナウンスとともに登場曲流れて喋り始めるの超新体験で、テンションブチ上がった
— toshimaru (@toshimaru_e) March 10, 2024
お久しぶりの更新です。ブログをリニューアルしました。
久しぶりのブログ更新です。
ブログのデザインをリニューアルしたいなーと思い立ち、リニューアルを推進するために自分自身にブログのデザインを刷新するまではブログを更新しないぞ、という制約をかけてました。
その過程で TTIL なんていう雑メモ置き場的なサブ・ブログを初めてしまい、本家のこちらの更新をサボっておりました。
が、一念発起してブログをリニューアルしました。
ブログの技術スタック…という程大きな技術スタックの変化はないのですが、今回のリニューアルで使った技術を紹介します。
(🆕 が付いているのが今回のリニューアルでの新たな取り組み)
tailwind-nextjs-starter-blogが好みのシンプルでスッキリとしたデザインに仕上がっていたので、それをベースに Jekyll に合わせて改変を加えでデザインを仕上げた。
最初はお手製のtoshimaru/jekyll-theme-classless-simpleを使ってデザイン組んでいたけど、今後のカスタマイズ性を考えて Tailwind CSS で組む方向に方針転換した。
個人ブログのレイアウトを TailwindCSS で組んでみるなどしてみた。個人ブログくらいの規模なら別に使わなくてもいい気はしたけど、 TailwindCSSのエコシステムに乗っかっていることで得られるであろう今後のメンテナンスのしやすさはかなり良さそうという実感を得た。
— toshimaru (@toshimaru_e) March 17, 2024
HostingはGitHub Pagesと基本は変わっていないが、開発中のPrivateなホスティング(ログインしたら開発中のブログv2が閲覧できる)は Cloudflare Pages を使った。
Private Repo で GitHub Pages が使えなかったのでCloudflare Pages でサイト構築した » GitHub Pages は(GitHub 無料プランにおいて)プライベートリポジトリでは運用できない https://t.co/4vjiqkGffl
— toshimaru (@toshimaru_e) May 1, 2023
他にも検討したこととして、ブログエンジンを Jekyll から卒業して Next.js、Hugo、Astro あたりに乗り換えることを検討したが、コアライブラリのアップデート追従でエターナる未来が見えたので、一番慣れている Ruby 製の Jekyll で落ち着いた(加齢とともに新たな技術的チャレンジが腰が重くなる今日この頃)。
package.json
を導入下記あたりは今後のアップデートで対応したいと思っています。
リニューアルもしたことだし、わりと長めの文章や技術記事とかはこちらを更新していこうと思います。💪
日々の学びを綴るサブブログもよろしくです 👉 TTIL
先に結論だけ書きます。ここだけ押さえておけばOK。
独自ドメインでメールアドレスを運用する場合、無償版G Suiteが定番でした。
無償版 G Suiteの新規契約は、2012年12月5日をもって終了しており、現在新規契約は停止しています1。
しかし、2022年一月に無償版G Suiteの終了がアナウンスされました。これにより、長らく無償版G Suiteを使用していたユーザーはアカウント移行を余儀なくされるかたちとなりました。
しかし、結論としては無償版G Suiteは継続されることになりました。それに至る経緯をまとめたいと思います。
個人的な対応タイムラインを時系列で追います。
先行して話題になってたからわかってはいたけど、ついにGoogle workspaceの有料化の案内が今朝きてしまった。どうするか検討せねば… pic.twitter.com/7Tg2VcpSTH
— toshimaru (@toshimaru_e) April 8, 2022
6月までにプラン変えろとのことなのでとりあえず上げといた pic.twitter.com/DpYMmd6tso
— toshimaru (@toshimaru_e) May 3, 2022
For users of the free legacy GSuite, @Google has added an option in the admin console to opt out of the @GoogleWorkspace transition for personal accounts. The personaly use option is rolling out slowly, so if you don't see it now, check back later. https://t.co/PURAsEM2cG pic.twitter.com/MhIiTdQElx
— Steve Whitcher (@NeighborGeek) May 16, 2022
ということで現在は一度アップグレードしてしまったプランを無償版G Suiteに戻してもらう移行手続きの途中ということになります(移行完了後にまたこちらに報告します)。
今回は無償版G Suiteが継続されることになったから良かったものの、ついでに本当に無償版が終了していた場合に対応はどうしていたかも書いておこうと思います。
いろいろ検討した中では、最終的にはCloudflare Email Routingが一番良さそうでした。
https://t.co/wkrifm4rz2 聴きつつ Cloudflare Email Routing が良さそうやんって思って試したら全然イケたので「これでいいや」という気持ちになったhttps://t.co/q0gxfT5ZTs
— toshimaru (@toshimaru_e) April 22, 2022
Cloudflare Worker にルーティングしてEメール処理をゴニョったりもできて、カスタマイズ性・拡張性に富み良さそうでした。
今回のアナウンスに伴い、アカウントを削除・移行したり、その作業に多くの時間を費やした方も多くいらっしゃるのではないかと思います。残念ながら削除したアカウントは戻ってきませんし、費やした時間・労力も当然戻ってきません。
先般も楽天モバイルの0円プラン廃止が話題となりました。こういった”おいしい”無料プランは未来永劫続くわけではないことを肝に命じて、いつか来る有償化の流れに備えておく必要がありそうです。
本記事では、マルチステージビルド構成のDockerfile
のビルドの並列実行について紹介したいと思います。
今回テストで使うマルチステージビルドのサンプルとなるDockerfile
は下記です。
FROM alpine as test1
RUN sleep 10.1 # sleep from test1
FROM alpine as test2
RUN sleep 10.2 # sleep from test2
FROM alpine as test3
RUN sleep 10.3 # sleep from test3
FROM alpine
RUN echo "build start"
RUN sleep 10.0 # sleep from main
COPY --from=test1 /tmp /tmp
COPY --from=test2 /tmp /tmp
COPY --from=test3 /tmp /tmp
RUN echo "build finished"
実際に上述の Dockerfile
のビルドを並列実行しない場合(直列実行)と並列実行する場合の結果を比較してみます。
並列実行をOFFにして実行するには DOCKER_BUILDKIT=0
の環境変数をセットして docker build
を行います。
$ DOCKER_BUILDKIT=0 docker build --no-cache .
Sending build context to Docker daemon 331.1MB
Step 1/13 : FROM alpine as test1
---> b7b28af77ffe
Step 2/13 : RUN sleep 10.1 # sleep from test1
---> Using cache
---> 11b4518313de
Step 3/13 : FROM alpine as test2
---> b7b28af77ffe
Step 4/13 : RUN sleep 10.2 # sleep from test2
---> Using cache
---> c61101646517
Step 5/13 : FROM alpine as test3
---> b7b28af77ffe
Step 6/13 : RUN sleep 10.3 # sleep from test3
---> Using cache
---> 1aa97a170923
Step 7/13 : FROM alpine
---> b7b28af77ffe
Step 8/13 : RUN echo "build start"
---> Using cache
---> 8b2b09749321
Step 9/13 : RUN sleep 10.0 # sleep from main
---> Using cache
---> bc3f772d3fb1
Step 10/13 : COPY --from=test1 /tmp /tmp
---> Using cache
---> 0f861020f1c0
Step 11/13 : COPY --from=test2 /tmp /tmp
---> Using cache
---> eea3d212c0b7
Step 12/13 : COPY --from=test3 /tmp /tmp
---> Using cache
---> 9beba31a0ff6
Step 13/13 : RUN echo "build finished"
---> Using cache
---> 0986bef3d18f
Successfully built 0986bef3d18f
sleep 10
× 4 が直列に実行されるため、ビルドに 最低でも40秒 かかっていました。
では次に並列実行してみましょう。
並列実行するには DOCKER_BUILDKIT=1
をセットするか、私の環境の場合 DOCKER_BUILDKIT
の環境変数のセットしなくてもデフォルトで並列実行されるようになっていました。
Docker Desktop v3.2 を使っている場合は DOCKER_BUILDKIT=1
の環境変数が不要でデフォルトで並列実行されるようになっており、一方、Docker Desktop v3.1の場合は並列実行するためにはDOCKER_BUILDKIT=1
の環境変数の指定が必要でした。
$ docker build --no-cache .
[+] Building 13.9s (14/14) FINISHED
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 37B 0.0s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/alpine:latest 0.0s
=> CACHED [test3 1/2] FROM docker.io/library/alpine 0.0s
=> [test2 2/2] RUN sleep 10.2 # sleep from test2 12.4s
=> [stage-3 2/7] RUN echo "build start" 2.3s
=> [test3 2/2] RUN sleep 10.3 # sleep from test3 12.5s
=> [test1 2/2] RUN sleep 10.1 # sleep from test1 12.3s
=> [stage-3 3/7] RUN sleep 10.0 # sleep from main 10.6s
=> [stage-3 4/7] COPY --from=test1 /tmp /tmp 0.1s
=> [stage-3 5/7] COPY --from=test2 /tmp /tmp 0.1s
=> [stage-3 6/7] COPY --from=test3 /tmp /tmp 0.1s
=> [stage-3 7/7] RUN echo "build finished" 0.4s
=> exporting to image 0.2s
=> => exporting layers 0.2s
=> => writing image sha256:2dfb39f0fbed99a19fee51b23db685a0878eed7291bce08e88c3226e8fea271d 0.0s
sleep 10
× 4 が並列に実行されるため、全体として10秒程度でビルドが終了しています。
ビルド時間 | |
---|---|
並列実行しない場合 | 50秒 |
並列実行する場合 | 15秒 |
今回サンプルとなった Dockerfile
の場合、3倍の高速化 に成功しました。
タイトルの通り。
本ブログは Disqus を使ってコメントフォームを設置しています。いや、正確には設置していました。
SNSのプラットフォームが十分に成熟している昨今ですから、そもそもコメント欄を設置すること自体がなんとなく時代遅れになってきているのでは?と感じるのですが、Jekyllを使われている皆さんはDisqusを使ってコメント欄を設置されているようなので、それに倣ってDisqusでコメントフォームを設置。
Jekyllならここまでできる!ブログをJekyllに移行しました
しかしながら、試したいDisqus有料機能があり有料プランに一度トライアル申込みするとトライアル終了後に 広告が表示され続けて消せない という事態に見舞われました。
サポートチームに問い合わせたのですが 広告を消す唯一の手段は再度有料プランに切り替えることだ ということらしいです。(今までは無料で広告無しで使えていたのですが、一度有料プランにしてしまうとそれが継続できなくなるっぽい😢
そんなこんなでしばらく Disqus コメントフォームを閉鎖していたのですが、やはりコメントフォームはあったほうがいいかなぁということで、 Disqus の別のアカウントを作成し Disqus のコメントを再設置いたしました。
過去のコメントも移行できれば良かったのですが、どうやら Disqus から Disqus のコメント移行はサポートされていないようだったので、過去コメントは失ってしまいました。(過去にコメントいただいた方すみません🙇 データは旧アカウントには一応残っています…
Disqus側のほうで方針変わって広告が無料プランでも表示されるようになったら再び消す可能性もありますが、しばらくはこちらをご利用いただければと思います。🙏
Disqus有料プランに(トライアルでも)一度切り替えると、二度と広告無しの無料プランには戻れない。