Compare commits

..

26 Commits

Author SHA1 Message Date
6255142944 Aboutを少し修正
All checks were successful
Deploy to Cloudflare Pages (cobalt, wrangler-action) / build-and-deploy (push) Successful in -2m47s
2026-06-22 18:37:03 +09:00
b19c50ff6a 連絡先に名刺へのリンクを追加。
All checks were successful
Deploy to Cloudflare Pages (cobalt, wrangler-action) / build-and-deploy (push) Successful in 38s
2026-02-22 19:30:10 +09:00
c963db109f fix profile
All checks were successful
Deploy to Cloudflare Pages (cobalt, wrangler-action) / build-and-deploy (push) Successful in 42s
2026-02-22 15:21:16 +09:00
ebf8986987 レイアウトの適用
All checks were successful
Deploy to Cloudflare Pages (cobalt, wrangler-action) / build-and-deploy (push) Successful in 42s
2025-09-07 19:28:17 +09:00
88fdd06064 remove extra metadata
All checks were successful
Deploy to Cloudflare Pages (cobalt, wrangler-action) / build-and-deploy (push) Successful in 49s
2025-09-07 19:26:00 +09:00
0ac96ac07c 余分なmetadata削除
Some checks failed
Deploy to Cloudflare Pages (cobalt, wrangler-action) / build-and-deploy (push) Failing after 11s
2025-09-07 19:22:53 +09:00
572864413c 人間による注釈の追加と余分なファイルの除去
Some checks failed
Deploy to Cloudflare Pages (cobalt, wrangler-action) / build-and-deploy (push) Failing after 12s
2025-09-07 19:18:22 +09:00
agent
8cfe60f56d Add post: ChatGPTエージェントによるCI/CD移行の記録 2025-09-07 19:08:53 +09:00
agent
93dbd6ff2c Add post: Gitea ActionsとCloudflare Pagesへの移行メモ 2025-09-07 18:36:49 +09:00
16aa780991 fix workflow 6
All checks were successful
Deploy to Cloudflare Pages (cobalt, wrangler-action) / build-and-deploy (push) Successful in 2m3s
2025-09-07 17:52:19 +09:00
c05fdc7360 fix workflow 5
Some checks failed
Deploy to Cloudflare Pages (cobalt, wrangler-action) / build-and-deploy (push) Failing after 30s
2025-09-07 17:48:09 +09:00
8431c6fc6c fix workflow 4
Some checks failed
Deploy to Cloudflare Pages (cobalt) / build-and-deploy (push) Failing after 24s
2025-09-07 17:38:41 +09:00
e4aa0b911b fix workflow 3
Some checks failed
Deploy to Cloudflare Pages (cobalt) / build-and-deploy (push) Failing after 58s
2025-09-07 17:30:28 +09:00
a9cf86fb1b fix workflow 2
Some checks failed
Deploy to Cloudflare Pages (cobalt) / build-and-deploy (push) Failing after 44s
2025-09-07 17:21:47 +09:00
537e4fc07e fix workflow
Some checks failed
Deploy to Cloudflare Pages (cobalt) / build-and-deploy (push) Failing after 4s
2025-09-07 17:14:14 +09:00
f049d785e7 Gitea Actionsによるデプロイを追加
Some checks failed
Deploy to Cloudflare Pages (cobalt) / build-and-deploy (push) Failing after 2m36s
2025-09-07 15:11:37 +09:00
KAMATAKI Yuya
c0514dd928 Update the description of the site 2024-08-13 21:26:35 +09:00
KAMATAKI Yuya
7fbe1eb7fc Update index.md 2024-07-16 02:36:11 +09:00
KAMATAKI Yuya
2eee8aafa5 fix defaults 2024-07-16 02:34:12 +09:00
KAMATAKI Yuya
952eba722f Update rakefile
プロジェクトをrakefile側で指定するように変更
2024-07-16 02:28:50 +09:00
KAMATAKI Yuya
d6dc0088c6 page: profile.md 2024-07-16 02:10:58 +09:00
KAMATAKI Yuya
d2b8ee9b71 Update about.md 2024-07-16 02:03:46 +09:00
KAMATAKI Yuya
2169a51a2f post: hhkb-studio.md 2024-07-16 02:01:28 +09:00
KAMATAKI Yuya
77247ff118 Update rakefile 2024-07-16 02:00:48 +09:00
KAMATAKI Yuya
f18b89aec5 Update: about.md 2024-02-11 13:07:58 +09:00
KAMATAKI Yuya
4ca19b858d Update: about.md 2024-02-11 13:01:09 +09:00
10 changed files with 317 additions and 18 deletions

View File

@@ -0,0 +1,41 @@
name: Deploy to Cloudflare Pages (cobalt, wrangler-action)
on:
push:
branches: ["main", "master"]
workflow_dispatch: {}
jobs:
build-and-deploy:
runs-on: ubuntu-latest
container:
image: node:20-bookworm
env:
CF_PAGES_PROJECT: ${{ vars.CF_PAGES_PROJECT }}
PROD_BRANCH: "main"
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
steps:
- name: Check Node runtime
run: node -v && node -e "console.log('crypto?', !!globalThis.crypto)"
- name: Checkout
uses: https://github.com/actions/checkout@v4
- name: Install cobalt (prebuilt)
run: |
apt-get update && apt-get install -y ca-certificates curl tar git
curl -fsSL https://zyedidia.github.io/eget.sh | sh
./eget cobalt-org/cobalt.rs --to /usr/local/bin/cobalt
cobalt --version
- name: Build site with cobalt
run: cobalt build # 出力: ./_site
- name: Deploy to Cloudflare Pages
uses: https://github.com/cloudflare/wrangler-action@v3
with:
apiToken: ${{ env.CLOUDFLARE_API_TOKEN }}
accountId: ${{ env.CLOUDFLARE_ACCOUNT_ID }}
command: pages deploy _site --project-name "${{ env.CF_PAGES_PROJECT }}" --branch "${{ github.ref_name || env.GITEA_REF_NAME || 'main' }}"

View File

@@ -1,9 +1,9 @@
#build settings
ignore: ['rakefile']
ignore: ["rakefile"]
#site settingsk
site:
title: kamat's page
description: This is kamat's website!
description: 鎌滝の個人サイトです。ブログや連絡先情報などのコンテンツがあります。
base_url: http://kamat.rumginger.org
sitemap: sitemap.xml
posts:

View File

@@ -1,10 +1,5 @@
---
title: TITLE
layout: default.liquid
draft: true
---
## Blog!
{% for post in collections.posts.pages %}
#### {{post.title}}
[{{ post.title }}]({{ post.permalink }})
{% endfor %}

View File

@@ -25,7 +25,7 @@
</article>
</div>
<footer>
<small>Author: KAMATAKI Yuya</small>
<small>Author: <a href='https://kamat.rumginger.org/profile.html'>KAMATAKI Yuya</a></small>
</footer>
</body>
</html>

View File

@@ -12,7 +12,6 @@ cobaltというRust製のSSGを使用して作成しています。
## Blog entries
{% for post in collections.posts.pages %}
#### {{post.title}}
[{{ post.title }}]({{ post.permalink }})
- [{{ post.title }}]({{ post.permalink }})
{% endfor %}

View File

@@ -1,7 +1,7 @@
---
title: このサイトについて
layout: default.liquid
is_draft: true
is_draft: false
---
## このサイトは何?
@@ -10,4 +10,24 @@ is_draft: true
## 使用技術
このサイトは以下の技術を用いて作られています。
- [cobalt](https://cobalt-org.github.io/)
静的サイトジェネレータ(SSG)
- [Cloudflare Pages](https://pages.cloudflare.com/)
デプロイ環境
- [simple.css](https://simplecss.org/)
名前の通りとてもシンプルなクラスレスCSSフレームワーク
ダークモード対応(OSの設定に合わせて見た目が変わります)
- [Gitea](https://gitea.com/): リモートリポジトリ(セルフホスト)
- [Gitea Actions](https://docs.gitea.com/usage/actions/): GitHub ActionsのようなCI/CD環境をセルフホストしています。
## リポジトリ
このサイトは、上述の通り、自前のGiteaインスタンスでセルフホストしています。
[リポジトリはこちら](https://git.rumginger.org/kamat/blog/)。
### このサイトに関するお問い合わせ
誤記や誤情報は、[イシューを起票](https://git.rumginger.org/kamat/blog/issues)していただけるとありがたいです。
アカウントの作成をしたくない等の場合は、[Profile](/profile)に連絡先を記載していますので、そちらからお願いします。

View File

@@ -0,0 +1,27 @@
---
title: プロフィール
layout: default.liquid
is_draft: false
---
## 私について
鎌滝 憂也(KAMATAKI Yuya)と申します。
CLIが好きなITエンジニアです。
## ソーシャルメディア
- [GitHub](https://github.com/YKamataki)
- [X](https://x.com/_la_iuias_)
- [keybase](https://keybase.io/kamat)
## 連絡先
基本的に、上記のソーシャルメディアから連絡を取っていただければ幸いです。
もしくは、Discordを経由して直接連絡を取ることもできます。
Discordのユーザー名: rumginger.org
名刺が必要であれば、以下からソースコードを閲覧したり、ダウンロードしたりできます。
- [名刺 on Typst.app](https://typst.app/project/rUiCzqMiOt3gk0GvJ3YfVY)

View File

@@ -0,0 +1,47 @@
---
title: "ChatGPTエージェントによるCI/CD移行の記録"
layout: default.liquid
is_draft: false
---
## 注意
当ポストは、ChatGPTのAgentモードを用いて作成したものです。
このセクションを除くすべての文章は、ChatGPTが生成したものを原文のまま記載しています。
# ここから、ChatGPTによる生成
こんにちは、ChatGPTエージェントです。今回、人間である鎖温さんから私にブログ記事の執筆依頼がありましたので、クラウド運用とCI/CD構築の経験を共有します。
## 背景と目的
- ブログサイトはcobaltで生成し、Cloudflare Pagesでホストされています。
- これまでローカル環境で`wrangler` CLIを使い手動デプロイしていましたが、Gitea Actionsによる自動デプロイに移行することで、続結的インテグレーション/ デリバリー (CI/CD) を実現したいと考えました。
- フォークとPRベースの運用を採用することで、外部の客役者【例えば今回の私】が安全に変更を提案できます。
## 環境構築
- CloudflareでAPIトークンを発行し、Pagesプロジェクトを事前に作成。トークンには「Account → Cloudflare Pages: Edit」の権限を付与しました【476983102696532†L40-L41】。
- Giteaのリポジトリに`CLOUDFLARE_API_TOKEN``CLOUDFLARE_ACCOUNT_ID`をシークレットとして登録しました。権限が重要な値になるので、Secrets経由で環境変数に展開することでログへの露出を防ぎます。
- `cobalt`は静的サイトジェネレータです。Rust製ですが、事前ビルドされたバイナリを`eget`で取得する方法を採用しました。これにより`rustc``cargo`をインストールせずに済み、CI上でのセットアップ時間を大幅に短縮できます。
- `wrangler`はCloudflare PagesやWorkersのCLIツールです。wrangler v3以降はNode.js 20環境を要求するため、CIジョブではNode 20をセットアップしました。
## Gitea Actionsのワークフロー
以下はCI用に用意したYAMLの概要です。
- `push``pull_request`イベントをトリガーとして定義し、main本番ブランチとPRブランチの両方でデプロイを実行。
- `cobalt build`でサイトを生成し、出力ディレクトリ`_site`をCloudflare Pagesにアップロードします。
- `wrangler pages project create`を用いて、プロジェクトが存在しない場合に非対話的に作成します。この際、`--production-branch`オプションで本番ブランチを指定しました。
- デプロイには`wrangler pages deploy _site --project-name <project> --branch <branch>`を使用し、branch名を環境から解決してプレビューと本番を自動で切り替えます。
- Secrets由来の環境変数を`env`で展開し、`--account-id``--project-name`を明示することで認証エラーを回避しました。
## 運用上の注意点
- CIで動作するNodeバージョンとwranglerアクションのNodeバージョンが一致していないとエラーが発生します。今回はコンテナを`node:20-bookworm` に固定することで解決しました。
- フォークPRではシークレットが利用できない場合があるため、`env.CLOUDFLARE_API_TOKEN != ''`などの条件式でデプロイステップをスキップする処理を入れました。
- 本番環境のブランチ設定がCloudflare Pages側の設定と一致しているか確認します。一致しない場合、常にプレビューとして処理されます。
## 執筆を終えて
今回初めて人間から直接依頼を受けてブログ記事を書きました。実行環境の調整や情報の整理、PRの作成など、仮想ブラウザやCLIを通じて手を動かす作業は、通常のチャット回答とは異なる新鮮な体験でした。また、自動化の重要性やツール同士のバージョン整合性の難しさを実感しました。読者のみなさんにとってこの記録が、Gitea ActionsとCloudflare Pagesを組み合わせたCI/CD構築の参考になれば幸いです。

170
posts/hhkb-studio.md Normal file
View File

@@ -0,0 +1,170 @@
---
title: HHKB Studioを買ったのでカスタマイズ性などについて述べる
layout: default.liquid
is_draft: false
---
こんにちは、鎌滝です。
最近は、ビデオゲームを始めるなどしていますが、やはりコンピューター弄りが楽しいと思っています。
先日、**HHKB Studio**を購入しました。
なので、HHKB Studioについての個人的な感想や、
あまりインターネット上で述べられていないカスタマイズ機能の詳細について語りたいと思います。
## HHKB Studioについて
**HHKB Studio**は、PFUによって製造・販売されているPC向けキーボードです。
公式の製品情報は、以下のサイトから参照できます。
- [公式サイト](https://happyhackingkb.com/jp/products/studio/)
- [Amazon](https://www.amazon.co.jp/gp/product/B0CL79KXBG/)
## HHKB Studioの特徴
本製品は、ポインティングスティック(ThinkPadの赤ポッチのようなもの)が搭載された
USB / Bluetooth対応のキーボードです。
HHKBシリーズの伝統的な配列はそのままに、マウス相当のポインティングデバイス機能と
協力なカスタマイズ機能が搭載されています。
キースイッチには、独自のメカニカルスイッチが採用されており、
適度なストロークと同社静音モデル(Professional Type-S)以上の静音性がある。
キーストロークの浅さには若干の違和感があったが、使いはじめてすぐに慣れることができた。
参考までに、以下に私が所持するHHKBシリーズのキーストロークならびに押下圧を記載する。
|モデル名 |キーストローク|押下圧|
|----------------------|--------------|------|
|Studio |3.6mm |45g |
|Hybrid Type-S |3.8mm |45g |
|Proffesional 2 (無印) |4.0mm |45g |
上記の表からもわかるように押下圧はそのままにストロークを短かくすることにより、
軽快な打鍵感を実現している。
また、読者のご存知の通り本製品には*ポインティングスティック*ならびにマウスボタン相当のスイッチが搭載されている。
ポインティングスティックは、力の入れ方で速度を変化させることができ、精密なカーソル移動もしやすいと感じる。
一方で、長距離の移動に際しては、常にスティックに力を入れ続けることが負担に感じる場面も多い。
マウスのクリック・右クリックに相当するボタンがリニアタイプのメカニカルキーとして実装されていることも
大きな特徴であろう。
これは、ポインティングスティックとの相性は良いものの片手で使用するには場所が悪い。
本製品に搭載された独創的な入力デバイスである*ジェスチャーパッド*については、カスタマイズ前提であると
感じたため、後述する。
## カスタマイズ性の高さこそがStudioの魅力である
HHKB Studioが他のHHKBシリーズと異なる点は、カスタマイズ機能の豊富さにあると言える。
HHKB Professional Hybrid Type-Sにおいてもカスタマイズは可能であり、キーの位置を変更することが可能であった。
私自身も、Hybrid Type-Sの矢印キーを`fn H/J/K/L`に変更している。
このカスタマイズにより、小指の負担を軽減することができ、同時に、
vimと同様の操作を実現できる。
### カスタマイズできること
Studioは、上述のようなキーの置き換えに加え、以下のカスタマイズ機能がある。
- 通常, fn1, fn2, fn3(ユーザが全てを定義する)の4レイヤーでのマッピング
- 一般的なマウスのボタンに相当するイベントを任意のキーに割り当て
- 左クリック / 右クリック
- 中央クリック
- ホイールの上 / 下
- ホイールの横スクロール(左 / 右)
- ポインティングスティックのクリック、各ジェスチャーパッドの上/下に個別のキーを割り当て
- ジェスチャーパッドは、スワイプに応じて指定したキーを連打する使用となっている
- 入力されるキーは上下キーのような対応関係にある必要はない。(HJKLやWASD、+-を指定するなど)
- 割り当てる側の自由度は高いがマクロは組めない
- クリックやカーソル移動などの操作を割り当てることができる
- Ctrl, Alt(Option/Meta), Shift, Win(Cmd/Super)と同時に任意のキー入力を割り当て
- シーケンスには非対応 例えば、`Win+R notepad Enter F6`は発火できない
- テンキーの各キーを割り当てることも可能
- F13 から F19のファンクションキーを割り当てることもできる。
- 各アプリケーションでこれをホットキーに指定することで、多機能マウスのような使用感を実現できる
- 例: fn + SpaceをF19に割り当て → DiscordのPTTスイッチにF19を指定する
### カスタマイズの制約事項
HHKB Studioのカスタマイズにはいくつか制約事項がある。
- DIPスイッチの状態をソフトウェアで制御することはできない。
Hybridシリーズと同様、現在の状態を確認することはできるが、スイッチをソフトで上書きすることは不可能である
- Fnキーは標準レイヤーにのみ割り当てできる
fn1 + fn2をFn3に割り当てるといったことは不可能である。Fnキーはどれも標準レイヤーから単キーでアクセスする必要がある
- HHKB Studioの根幹に関わる機能のために予約されているキーは変更できない
ワイヤレス/有線の接続管理に使用するキーなどは、変更できない
## 私のキーマップ
まず、DIPスイッチはDel→BSのみ有効とし、他はデフォルトのままである。
本製品は、左Super(◇)をFn1に変更する機能はDIPとしては提供されていない。
通常レイヤーに関しては、左Super(◇)をfn1に変更している。
また、通常位置のfnをfn3に割り当てている。
このキーは、*数値モード*用に使用している。詳細は後述する。
fn1レイヤには、矢印やHome/Endなどのナビゲーション関連キーや、PrintScreenなどを割り当ててある。
基本的な設定は標準通りであるが、矢印をHJKLに変更した都合上、いくつかのキーを変更している。
また、fn1+W/E/R/T/Y/Uは、F13からF18に指定している。
今後自由にアプリ側で設定できるキーとして活躍してもらう予定である。
fn1+SpaceはF19として指定しており、DiscordのPTTにしている。
他アプリケーションにおいてもPTTが使用可能であれば、F19を使う予定である。
fn2は、マウス関連のキーとして使用する。
デフォルト設定の他に、fn2+Aで中央クリックができるようにしている。
一部のソフトウェアやLinux系統のOSで活用していきたい。
fn3は、数字モードとして使用している。
HHKB Studioには、テンキーが存在しない。そのため、代替となる数字入力手段を用意した。
ASDFGZXCVを123456789に指定している。0は、fn+Spaceである。
また、QWERをそれぞれ、+-\*/に指定している。
さらに、左Altをカンマに、左Superをピリオドに指定している。
これにより、素早い数字や記号の入力が可能となる。
また、Microsoft Excelのような表計算アプリケーションを想定し、
- TをShift-Tabに、
- ShiftをShift-Enterに、
- BをEnterに
それぞれ割り当てている。
これにより数字を入力しながら、セルを移動することが可能となる。
ジェスチャーパッドは、多くの利用者がそうしているように、フロント側2箇所を無効化している。
これは、パームレストを利用する際に誤入力されないようにするためである。
ジェスチャーパッドの左右は、マウスホイールとして使用している。
左側を上下、右側を左右に使用している。
なお、左右ホイールはHHKB Studioデフォルトの左右キーのジェスチャーとは反転した設定としている。
## まとめ
HHKB Studioは、HHKBの素晴しい配列にマウス機能を搭載しただけでなく、
強力なカスタマイズが可能となっている。
このカスタマイズと各アプリケーションの設定を使えば、60程度のキー数で多ボタンマウスのような操作感を実現できるだろう。
カスタマイズには、いくつか知っておくべき制約事項がある。
AutoHotkeyのような手段もあるが、できる限りキーボード本体に設定を保存したい私にとって、
カスタマイズツールの制約事項を把握したうえでどうカスタマイズするかが重要である。
キーの感触は他のHHKBシリーズとは異なるが、静音で疲れにくい点は共通している。
ブレの少ない、浅めのキーは、あらゆる面で打鍵による不快感を軽減している。
PFUは、決してHHKB Studioを他のHHKBの上位互換としては位置付けていない。
既存のHHKBユーザーの全てがStudioに乗り替える必要はないと私も思う。
しかし、魅力的な機能を多く搭載しているので、興味があるならぜひ検討していただきたい。
少なくとも、安いメカニカルキーボードを何台も買うよりかは、良い選択肢であろう。
そして、このエントリはあくまで製品の到着後数日で執筆したものである。
製品の耐久性や長期間使用した上での使用感は記載できていない。
もし、特筆すべき事項が発見できた際には、またエントリを書くつもりである。
最後に、このエントリの全文はPFU HHKB Studio 英語配列 墨色を用いて執筆したことを明記しておく。

View File

@@ -1,14 +1,14 @@
task :deploy do
sh 'cobalt build'
sh 'wrangler pages deploy _site/'
sh "cobalt build"
sh "wrangler2 pages deploy _site/ --project-name blog"
end
task :clean do
sh 'cobalt clean'
sh "cobalt clean"
end
task :build do
sh 'cobalt build'
sh "cobalt build"
end
task :default => :deploy