[{"content":"Anthropic 社が提供する skill-creator は、コーディングエージェントに対して skill を追加する際に必須とも言えるツールです。この skill はユーザーの入力テキストから精度の高い skill を生成することができます。さらに、skill の評価や改善、比較することも可能です。\nしばらく使っていく中で、skill-creator で作成やレビューした skill の中で、処理が途中で停止してしまうものがあることに気づきました。\nこの記事では、その不具合の原因と対応方法として追加した skill について紹介します。\n複数 step で長時間処理する skill で発生した問題 Claude Code 用に GitHub 上の Issue やローカルの仕様ファイルをベースに実装を行う task skill を作成し使用していました。 仕様を Issue または仕様書 Markdown で作っておいて実装するための skill です。\nGitHub 上の Issue またはローカルのファイルパスを受け取る 実装方法を検討し計画する 実装を実施 codex でコードレビューを実施、必要に応じて修正を行う Pull Request を作成する この skill のうち、4 のコードレビューの部分でなぜか処理停止してしまう問題が発生していました。\n処理が停止する原因 Claude Code とともに処理内容を確認したところ、4 のコードレビューの部分に問題があることがわかりました。\n修正前 指摘事項を自動修正すべき項目と人間の判断が必要な 2 グループに分類 自動修正 人間の判断が必要な項目をユーザーに提示 修正後 指摘事項を自動修正すべき項目と人間の判断が必要な 2 グループに分類 指摘事項が0 件の場合は 2,3 を skip し次の処理へ進む 自動修正 人間の判断が必要な項目をユーザーに提示 指摘事項 0 件の場合に、次の処理に進んでも処理対象がない。これが原因で処理が停止していることがわかりました。\n対応方法: レビュー用 skill の追加 task skill は内部で他 skill を参照していたり、複数 step にわたって条件分岐付きの処理を行っていたため実装時に見落としていました。 この分岐に漏れがないかチェックするための skill を追加しレビュー時に使用することにしました。\nこの skill 自体も skill-creator で作成しています。\nNote 現在、この skill は会社のプライベートリポジトリで管理しているため 1 部のみ抜粋しています。\n# audit-skill-branches コマンド skill ドキュメント（`SKILL.md` と `references/*.md`）を静的に読み、 **条件分岐の網羅性と後続処理の記述**に絞って診断する skill。 診断主体は **ホストエージェント自身**。スクリプトは引数解析と対象 md の列挙のみを担い、 判定はホスト LLM が観点プロンプトを Read して内製で行う。 ## なぜこの skill が必要か skill が条件分岐を持つとき、片方のアームの後続処理が記述されていないと、 agent はその分岐に入った瞬間に「次に何をすべきか」を失う。例えば次のような書き方: ```markdown - markdown ファイル: 本文を翻訳して frontmatter を保持する - text ファイル: TODO ``` `text ファイル` を渡された agent は `TODO` 以降の手順を持たないため、応答が止まりやすい。 また「`else` / それ以外」の fallback が無い列挙、空の見出しセクション、 参照先が存在しない `下記参照` も同種の事故を生む。 これらは skill-creator の eval（実プロンプトを流して品質を測る動的評価）では拾いにくい。 **入力がその分岐に入って初めて顕在化する**ため、すべての分岐を流し切る eval を組まない限り見逃される。 本 skill は md を静的に読んで網羅性を確認することで、事故が起きる前に検出する。 その他の残った問題 skill-creator は skill を追加するための道具なので、その他の細かい問題についてはユーザー側で対応する必要があります。\n今回紹介した分岐の問題に加え次のような問題が発生することがわかっています。\nコーディングエージェントに用意されているコマンドや skill 名と重複した skill を作ってしまう 複数ファイルを参照する場合に、skill-creator ベースでレビューを実施した場合に漏れる場合がある 人間のレビューには原因があるので随時 skill や linter ツールを追加して対応していくことで改善が可能です。\n","permalink":"https://issueoverflow.com/2026/05/30/compensate-for-the-shortcomings-of-a-skill-creator-with-other-skills/","summary":"\u003cp\u003eAnthropic 社が提供する \u003ca href=\"https://github.com/anthropics/skills/blob/main/skills/skill-creator/SKILL.md\"\u003eskill-creator\u003c/a\u003e は、コーディングエージェントに対して skill を追加する際に必須とも言えるツールです。この skill はユーザーの入力テキストから精度の高い skill を生成することができます。さらに、skill の評価や改善、比較することも可能です。\u003c/p\u003e\n\u003cp\u003eしばらく使っていく中で、skill-creator で作成やレビューした skill の中で、処理が途中で停止してしまうものがあることに気づきました。\u003c/p\u003e\n\u003cp\u003eこの記事では、その不具合の原因と対応方法として追加した skill について紹介します。\u003c/p\u003e\n\u003ch2 id=\"複数-step-で長時間処理する-skill-で発生した問題\"\u003e複数 step で長時間処理する skill で発生した問題\u003c/h2\u003e\n\u003cp\u003eClaude Code 用に GitHub 上の Issue やローカルの仕様ファイルをベースに実装を行う \u003cem\u003etask\u003c/em\u003e skill を作成し使用していました。\n仕様を Issue または仕様書 Markdown で作っておいて実装するための skill です。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eGitHub 上の Issue またはローカルのファイルパスを受け取る\u003c/li\u003e\n\u003cli\u003e実装方法を検討し計画する\u003c/li\u003e\n\u003cli\u003e実装を実施\u003c/li\u003e\n\u003cli\u003ecodex でコードレビューを実施、必要に応じて修正を行う\u003c/li\u003e\n\u003cli\u003ePull Request を作成する\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eこの skill のうち、4 のコードレビューの部分でなぜか処理停止してしまう問題が発生していました。\u003c/p\u003e\n\u003ch2 id=\"処理が停止する原因\"\u003e処理が停止する原因\u003c/h2\u003e\n\u003cp\u003eClaude Code とともに処理内容を確認したところ、4 のコードレビューの部分に問題があることがわかりました。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e修正前\n\u003col\u003e\n\u003cli\u003e指摘事項を自動修正すべき項目と人間の判断が必要な 2 グループに分類\u003c/li\u003e\n\u003cli\u003e自動修正\u003c/li\u003e\n\u003cli\u003e人間の判断が必要な項目をユーザーに提示\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e修正後\n\u003col\u003e\n\u003cli\u003e指摘事項を自動修正すべき項目と人間の判断が必要な 2 グループに分類\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e指摘事項が0 件の場合は 2,3 を skip し次の処理へ進む\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e自動修正\u003c/li\u003e\n\u003cli\u003e人間の判断が必要な項目をユーザーに提示\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e指摘事項 0 件の場合に、次の処理に進んでも処理対象がない。これが原因で処理が停止していることがわかりました。\u003c/p\u003e","title":"skill-creator の足りないところを他のスキルで補う"},{"content":"Obsidian の同期方法を iCloud から obsidian-git に切り替えました。 iCloud を使ったファイル同期はお手軽でしたが、問題があり移行を決めました。\niCloud 同期の問題点 ファイル同期のタイミングをユーザーが操作できないため、端末を短時間で切り替えた場合に問題が発生することがありました。\n症状としては、ファイルが壊れる、壊れたファイル起因で Obsidian が起動できない、といったものです。 本来であれば iPad や iPhone でもファイル編集を行いたかったのですが、これらの問題から iPad は限定的な使用に留め、iPhone ではアプリ自体を削除していました。\nobsidian-git への切り替え 参考記事を元に obsidian-git を導入し、 iCloud 同期から切り替えました。 同期先は GitHub の private リポジトリを利用しています。\n導入の難易度 iPhone/iPad で同期するには PAT (Personal Access Token) の設定が必要です。 この設定は普段から Git/GitHub を使っている人には特に難しくはありません。\n運用する中でファイルの conflict が発生した場合に手動で解決する必要があります。 普段から Git を使っていない人にはハードルが高いかもしれません。\n難しいと感じる人は Obsidian Sync を検討したほうが良さそうです。\n同期タイミングの設定 obsidian-git の設定でそれぞれの端末に同期タイミングを指定します。 複数マシン間で異なる設定にするため .gitignore で .obsidian/plugins/obsidian-git/data.json を除外しています。\nMacBook Pro: 60 分ごとに自動同期、必要に応じて手動で同期実行 iPad/iPhone: 自動同期なし、手動で同期実行 PC でメイン作業をし iPad/iPhone は補助的に使用する運用のための設定です。\n参考にした記事 obsidian-git で実現する Obsidian のプラットフォームを跨いだデータ同期 - EagleLand スマホのObsidianをGitで同期(2024.11) iPhone(iPad)でGitHubのObsidian Vaultを同期する ","permalink":"https://issueoverflow.com/2026/02/08/switched-to-obsidian-git/","summary":"\u003cp\u003eObsidian の同期方法を iCloud から \u003ca href=\"https://github.com/Vinzent03/obsidian-git\"\u003eobsidian-git\u003c/a\u003e に切り替えました。\niCloud を使ったファイル同期はお手軽でしたが、問題があり移行を決めました。\u003c/p\u003e\n\u003ch2 id=\"icloud-同期の問題点\"\u003eiCloud 同期の問題点\u003c/h2\u003e\n\u003cp\u003eファイル同期のタイミングをユーザーが操作できないため、端末を短時間で切り替えた場合に問題が発生することがありました。\u003c/p\u003e\n\u003cp\u003e症状としては、ファイルが壊れる、壊れたファイル起因で Obsidian が起動できない、といったものです。\n本来であれば iPad や iPhone でもファイル編集を行いたかったのですが、これらの問題から iPad は限定的な使用に留め、iPhone ではアプリ自体を削除していました。\u003c/p\u003e\n\u003ch2 id=\"obsidian-git-への切り替え\"\u003eobsidian-git への切り替え\u003c/h2\u003e\n\u003cp\u003e参考記事を元に \u003ca href=\"https://github.com/Vinzent03/obsidian-git\"\u003eobsidian-git\u003c/a\u003e を導入し、 iCloud 同期から切り替えました。\n同期先は GitHub の private リポジトリを利用しています。\u003c/p\u003e\n\u003ch3 id=\"導入の難易度\"\u003e導入の難易度\u003c/h3\u003e\n\u003cp\u003eiPhone/iPad で同期するには PAT (Personal Access Token) の設定が必要です。\nこの設定は普段から Git/GitHub を使っている人には特に難しくはありません。\u003c/p\u003e\n\u003cp\u003e運用する中でファイルの conflict が発生した場合に手動で解決する必要があります。\n普段から Git を使っていない人にはハードルが高いかもしれません。\u003c/p\u003e\n\u003cp\u003e難しいと感じる人は \u003ca href=\"https://obsidian.md/sync\"\u003eObsidian Sync\u003c/a\u003e を検討したほうが良さそうです。\u003c/p\u003e\n\u003ch3 id=\"同期タイミングの設定\"\u003e同期タイミングの設定\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/Vinzent03/obsidian-git\"\u003eobsidian-git\u003c/a\u003e の設定でそれぞれの端末に同期タイミングを指定します。\n複数マシン間で異なる設定にするため \u003ccode\u003e.gitignore\u003c/code\u003e で \u003ccode\u003e.obsidian/plugins/obsidian-git/data.json\u003c/code\u003e を除外しています。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMacBook Pro: 60 分ごとに自動同期、必要に応じて手動で同期実行\u003c/li\u003e\n\u003cli\u003eiPad/iPhone: 自動同期なし、手動で同期実行\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePC でメイン作業をし iPad/iPhone は補助的に使用する運用のための設定です。\u003c/p\u003e","title":"Obsidianのファイル同期をobsidian-gitに切り替えた"},{"content":"Obsidian を使い始めて 2 週間ほど経ったので記録を残しておきます。\n使い始めたきっかけ もともと Markdown ノートアプリとして他のツールを使っていました。ある程度の期間使ってきたのですがユースケースに合わない場面が出てきたため今回 Obsidian に乗り換えました。\nObsidian を選んだ理由は次のとおりです。\nMac/iPad/iPhone で使えること Markdown ファイルベースでデータを管理できること コミュニティベースのプラグインが充実していること 導入前の懸念としては次のものがありました。\nプラグインを活用するために設定が複雑になりすぎないか iPhone/iPad での動作に問題がないか 導入してみた結果として, 後者の動作に問題はありませんでした。 しかし前者の設定コストについてはある程度時間がかかりました。\nObsidian の設定 基本的には公式のヘルプを一通り確認しながら設定を進めました。\nここからはじめる - Obsidian 日本語ヘルプ - Obsidian Publish\nその後技術ブログを参考にプラグインを追加, 設定の面倒なところは ChatGPT や Gemini に相談して解決しました。\n参考にした記事 Obsidianで使っているプラグイン紹介 テーマファイルを参考にして Minimal を導入: kepano/obsidian-minimal Sync your notes across devices iCloud ベースの同期設定を採用 Back up your Obsidian files obsidian-git で定期的なバックアップを設定 obsidian-git で実現する Obsidian のプラットフォームを跨いだデータ同期 - EagleLand obisidian-git の設定を参考に Personal Access Token を使った GitHub 連携を設定 導入時に苦労したこと iCloud ベースの同期を使った場合に, Mac/iPad を切り替えながら使った際に同期がうまくいかず一部設定情報が初期化されてしまう問題がありました。 解決策として obisidian-git を使ったバックアップ設定を行うことで問題を回避しています。普段使いでは Mac/iPad をほぼ同時に使うことはないので例外的に発生した問題でした。\nその他大きく困った問題はありませんでした。もちろんアプリ特有の癖や挙動はありますが, それらは使っていくことで慣れていける範囲のことでした。\nこれから取り組みたいこと 時代はすっかり生成 AI になってしまいました。情報をテキスト化して管理することの価値はますます高まっていくと考えています。Obsidian を活用して情報管理の効率化を進めていければと思います。\n","permalink":"https://issueoverflow.com/2025/11/21/started-using-obsidian/","summary":"\u003cp\u003eObsidian を使い始めて 2 週間ほど経ったので記録を残しておきます。\u003c/p\u003e\n\u003ch2 id=\"使い始めたきっかけ\"\u003e使い始めたきっかけ\u003c/h2\u003e\n\u003cp\u003eもともと Markdown ノートアプリとして他のツールを使っていました。ある程度の期間使ってきたのですがユースケースに合わない場面が出てきたため今回 Obsidian に乗り換えました。\u003c/p\u003e\n\u003cp\u003eObsidian を選んだ理由は次のとおりです。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMac/iPad/iPhone で使えること\u003c/li\u003e\n\u003cli\u003eMarkdown ファイルベースでデータを管理できること\u003c/li\u003e\n\u003cli\u003eコミュニティベースのプラグインが充実していること\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e導入前の懸念としては次のものがありました。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eプラグインを活用するために設定が複雑になりすぎないか\u003c/li\u003e\n\u003cli\u003eiPhone/iPad での動作に問題がないか\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e導入してみた結果として, 後者の動作に問題はありませんでした。\nしかし前者の設定コストについてはある程度時間がかかりました。\u003c/p\u003e\n\u003ch2 id=\"obsidian-の設定\"\u003eObsidian の設定\u003c/h2\u003e\n\u003cp\u003e基本的には公式のヘルプを一通り確認しながら設定を進めました。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://publish.obsidian.md/help-ja/%E3%81%93%E3%81%93%E3%81%8B%E3%82%89%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B\"\u003eここからはじめる - Obsidian 日本語ヘルプ - Obsidian Publish\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eその後技術ブログを参考にプラグインを追加, 設定の面倒なところは ChatGPT や Gemini に相談して解決しました。\u003c/p\u003e\n\u003ch3 id=\"参考にした記事\"\u003e参考にした記事\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://zenn.dev/karaage0703/articles/fed57bd97487a6\"\u003eObsidianで使っているプラグイン紹介\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eテーマファイルを参考にして Minimal を導入: \u003ca href=\"https://github.com/kepano/obsidian-minimal\"\u003ekepano/obsidian-minimal\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://help.obsidian.md/sync-notes\"\u003eSync your notes across devices\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eiCloud ベースの同期設定を採用\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://help.obsidian.md/backup\"\u003eBack up your Obsidian files\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Vinzent03/obsidian-git\"\u003eobsidian-git\u003c/a\u003e で定期的なバックアップを設定\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://1000ch.net/posts/2025/obsidian-sync-across-platforms/\"\u003eobsidian-git で実現する Obsidian のプラットフォームを跨いだデータ同期 - EagleLand\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eobisidian-git の設定を参考に Personal Access Token を使った GitHub 連携を設定\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"導入時に苦労したこと\"\u003e導入時に苦労したこと\u003c/h2\u003e\n\u003cp\u003eiCloud ベースの同期を使った場合に, Mac/iPad を切り替えながら使った際に同期がうまくいかず一部設定情報が初期化されてしまう問題がありました。\n解決策として obisidian-git を使ったバックアップ設定を行うことで問題を回避しています。普段使いでは Mac/iPad をほぼ同時に使うことはないので例外的に発生した問題でした。\u003c/p\u003e","title":"Obsidian を使い始めた"},{"content":"私の作業環境を管理する各種設定ファイル(ドットファイル)の見直しを行いました。\nhttps://github.com/yuya-matsushima/dotfiles\n設定ファイルの対象は次のソフトウェアです。\nzsh vim tmux git tig iTerm2 見直し箇所 zsh 環境変数の整理 PHP に関する設定項目を削除 vim プラグインの見直し PHP に関する設定項目を削除 ファイラに vim-molder を追加 .vimrc, .gvimrc ともに個別環境で設定を上書きできる .vimrc_local, .gvimrc_local の読み込み処理追加 .vimrc .gvimrc iTerm2 の設定に合わせて colorschme を変更: https://github.com/yuya-matsushima/dotfiles/blob/main/.vim/_config/300_colorscheme.vim tmux ステータスラインまわりの表示を調整しよりシンプルに git git-secrets の追加 iTerm2 Profile や配色設定を管理する様に追加: https://github.com/yuya-matsushima/dotfiles/tree/main/iterm2 動画撮影用に背景透過のプロファイルを追加 見直しの理由 PHP を書く機会がほぼなくなっているので見直したかった デスクトップの動画撮影時に必要な設定がすぐに反映できるようにしたかった 複数の端末で作業する機会が増えているので見直したかった 最後に ブログを書く機会がグッと減っているので少しずつ書くようにしたい。\n","permalink":"https://issueoverflow.com/2021/10/10/renewed-dotfiles/","summary":"\u003cp\u003e私の作業環境を管理する各種設定ファイル(ドットファイル)の見直しを行いました。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/yuya-matsushima/dotfiles\"\u003ehttps://github.com/yuya-matsushima/dotfiles\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e設定ファイルの対象は次のソフトウェアです。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ezsh\u003c/li\u003e\n\u003cli\u003evim\u003c/li\u003e\n\u003cli\u003etmux\u003c/li\u003e\n\u003cli\u003egit\u003c/li\u003e\n\u003cli\u003etig\u003c/li\u003e\n\u003cli\u003eiTerm2\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"見直し箇所\"\u003e見直し箇所\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ezsh\n\u003cul\u003e\n\u003cli\u003e環境変数の整理\u003c/li\u003e\n\u003cli\u003ePHP に関する設定項目を削除\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003evim\n\u003cul\u003e\n\u003cli\u003eプラグインの見直し\u003c/li\u003e\n\u003cli\u003ePHP に関する設定項目を削除\u003c/li\u003e\n\u003cli\u003eファイラに \u003ca href=\"https://github.com/mattn/vim-molder\"\u003evim-molder\u003c/a\u003e を追加\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e.vimrc\u003c/code\u003e, \u003ccode\u003e.gvimrc\u003c/code\u003e ともに個別環境で設定を上書きできる \u003ccode\u003e.vimrc_local\u003c/code\u003e, \u003ccode\u003e.gvimrc_local\u003c/code\u003e の読み込み処理追加\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yuya-matsushima/dotfiles/blob/2a7ff0b35f6daeb28dba53a79b273d5298e1f285/.vimrc#L128-L130\"\u003e.vimrc\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yuya-matsushima/dotfiles/blob/2a7ff0b35f6daeb28dba53a79b273d5298e1f285/.gvimrc#L24-L27\"\u003e.gvimrc\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eiTerm2 の設定に合わせて colorschme を変更: \u003ca href=\"https://github.com/yuya-matsushima/dotfiles/blob/main/.vim/\"\u003ehttps://github.com/yuya-matsushima/dotfiles/blob/main/.vim/\u003c/a\u003e_config/300_colorscheme.vim\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003etmux\n\u003cul\u003e\n\u003cli\u003eステータスラインまわりの表示を調整しよりシンプルに\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003egit\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/awslabs/git-secrets\"\u003egit-secrets\u003c/a\u003e の追加\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eiTerm2\n\u003cul\u003e\n\u003cli\u003eProfile や配色設定を管理する様に追加: \u003ca href=\"https://github.com/yuya-matsushima/dotfiles/tree/main/iterm2\"\u003ehttps://github.com/yuya-matsushima/dotfiles/tree/main/iterm2\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e動画撮影用に背景透過のプロファイルを追加\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"見直しの理由\"\u003e見直しの理由\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePHP を書く機会がほぼなくなっているので見直したかった\u003c/li\u003e\n\u003cli\u003eデスクトップの動画撮影時に必要な設定がすぐに反映できるようにしたかった\u003c/li\u003e\n\u003cli\u003e複数の端末で作業する機会が増えているので見直したかった\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"最後に\"\u003e最後に\u003c/h2\u003e\n\u003cp\u003eブログを書く機会がグッと減っているので少しずつ書くようにしたい。\u003c/p\u003e","title":"dotfile をリニューアルしました"},{"content":"GitHub のアカウント名を yterajima から yuya-matsushima に変更しました。\n変更の理由 結婚を期に苗字が Terajima から Matsushima に変わりました。\nそれから早 5 年。\n事業として利用する各種アカウントからは, terajima 名義のものはなくなり GitHub アカウントと Twitter アカウントのみ残りました。\n最近ではアカウント名が本名と異なる点について説明が必要となり不便を感じていました。\nそこで思い切って変更しました。\n影響 公開している Go パッケージのインストール URL が変更されますが, yterajima アカウントが取得されない限りはリダイレクトされるらしいです。\n姓は変わる可能性があるのでアカウント名を決める際にはご注意を。\n","permalink":"https://issueoverflow.com/2021/08/23/changed-my-github-account-name/","summary":"\u003cp\u003eGitHub のアカウント名を \u003ccode\u003eyterajima\u003c/code\u003e から \u003ca href=\"https://github.com/yuya-matsushima\"\u003eyuya-matsushima\u003c/a\u003e に変更しました。\u003c/p\u003e\n\u003ch2 id=\"変更の理由\"\u003e変更の理由\u003c/h2\u003e\n\u003cp\u003e結婚を期に苗字が Terajima から Matsushima に変わりました。\u003c/p\u003e\n\u003cp\u003eそれから早 5 年。\u003c/p\u003e\n\u003cp\u003e事業として利用する各種アカウントからは, \u003ccode\u003eterajima\u003c/code\u003e 名義のものはなくなり GitHub アカウントと Twitter アカウントのみ残りました。\u003c/p\u003e\n\u003cp\u003e最近ではアカウント名が本名と異なる点について説明が必要となり不便を感じていました。\u003c/p\u003e\n\u003cp\u003eそこで思い切って変更しました。\u003c/p\u003e\n\u003ch2 id=\"影響\"\u003e影響\u003c/h2\u003e\n\u003cp\u003e公開している Go パッケージのインストール URL が変更されますが, \u003ccode\u003eyterajima\u003c/code\u003e アカウントが取得されない限りはリダイレクトされるらしいです。\u003c/p\u003e\n\u003cp\u003e姓は変わる可能性があるのでアカウント名を決める際にはご注意を。\u003c/p\u003e","title":"GitHub のアカウント名を変更しました"},{"content":" 久しぶりに .vimrc をいじっていたら NERDTree のように vim の左側に表示させたい, という気持ちになったので設定してみました。\n参考 Vim: you don\u0026rsquo;t need NERDtree or (maybe) netrw | George Ornbo netrw - Toggle explorer window - Vi and Vim Stack Exchange pi_netrw - Vim日本語ドキュメント 設定方法 次の内容を .vimrc に追記します。\n\u0026#34;ツリー表示 \u0026#34;表示を変更したい場合は i で切替可能 let g:netrw_liststyle=3 \u0026#34;上部のバナーを非表示 \u0026#34; I で toggle 可能 let g:netrw_banner = 0 \u0026#34;window サイズ let g:netrw_winsize = 25 \u0026#34;Netrw で Enter 押下時の挙動設定 let g:netrw_browse_split = 4 let g:netrw_alto = 1 \u0026#34;Netrw を toggle する関数を設定 \u0026#34;元処理と異なり Vex を呼び出すことで左 window に表示 let g:NetrwIsOpen=0 function! ToggleNetrw() if g:NetrwIsOpen let i = bufnr(\u0026#34;$\u0026#34;) while (i \u0026gt;= 1) if (getbufvar(i, \u0026#34;\u0026amp;filetype\u0026#34;) == \u0026#34;netrw\u0026#34;) silent exe \u0026#34;bwipeout \u0026#34; . i endif let i-=1 endwhile let g:NetrwIsOpen=0 else let g:NetrwIsOpen=1 silent Vex endif endfunction \u0026#34;ショートカットの設定 \u0026#34;= を 2 回連続押下で toggle noremap \u0026lt;silent\u0026gt;== :call ToggleNetrw()\u0026lt;CR\u0026gt; 設定値の詳細や Netrw の操作方法は Vim の日本語ドキュメントで確認できます。P でファイルを開くことができます。\nvim-lsp を coc.vim に切り替える作業を行なっていたらこうなりました。coc.vim も便利です。\n","permalink":"https://issueoverflow.com/2019/11/22/set-vim-netrw-like-nerdtree/","summary":"\u003cpicture\u003e\n            \u003csource\n                srcset=\"/2019/11/22/set-vim-netrw-like-nerdtree/netrw_hu_5dbfcda08d7ae94c.webp 480w, /2019/11/22/set-vim-netrw-like-nerdtree/netrw_hu_e8ed1784a71dd119.webp 800w, /2019/11/22/set-vim-netrw-like-nerdtree/netrw_hu_5f9da323b6146d.webp 1200w, /2019/11/22/set-vim-netrw-like-nerdtree/netrw_hu_2c85f94f393a4f57.webp 1628w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\n                type=\"image/webp\"\u003e\n            \u003cimg\n                src=\"/2019/11/22/set-vim-netrw-like-nerdtree/netrw.png\"\n                alt=\"Netrw に設定を反映した様子\"\n                width=\"1628\"\n                height=\"1164\"\n                loading=\"lazy\"\n                decoding=\"async\"\n                srcset=\"/2019/11/22/set-vim-netrw-like-nerdtree/netrw_hu_e21470f7f787c446.png 480w, /2019/11/22/set-vim-netrw-like-nerdtree/netrw_hu_cccae539c1d93dd7.png 800w, /2019/11/22/set-vim-netrw-like-nerdtree/netrw_hu_61047edb70939077.png 1200w, /2019/11/22/set-vim-netrw-like-nerdtree/netrw.png 1628w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\u003e\n        \u003c/picture\u003e\n\u003cp\u003e久しぶりに .vimrc をいじっていたら \u003ca href=\"https://github.com/scrooloose/nerdtree\"\u003eNERDTree\u003c/a\u003e のように\nvim の左側に表示させたい, という気持ちになったので設定してみました。\u003c/p\u003e\n\u003ch2 id=\"参考\"\u003e参考\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://shapeshed.com/vim-netrw/\"\u003eVim: you don\u0026rsquo;t need NERDtree or (maybe) netrw | George Ornbo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://vi.stackexchange.com/questions/10988/toggle-explorer-window\"\u003enetrw - Toggle explorer window - Vi and Vim Stack Exchange\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://vim-jp.org/vimdoc-ja/pi_netrw.html\"\u003epi_netrw - Vim日本語ドキュメント\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"設定方法\"\u003e設定方法\u003c/h2\u003e\n\u003cp\u003e次の内容を .vimrc に追記します。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-vimrc\" data-lang=\"vimrc\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u0026#34;ツリー表示\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u0026#34;表示を変更したい場合は i で切替可能\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003elet\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eg\u003c/span\u003e:\u003cspan style=\"color:#a6e22e\"\u003enetrw_liststyle\u003c/span\u003e=\u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u0026#34;上部のバナーを非表示\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u0026#34; I で toggle 可能\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003elet\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eg\u003c/span\u003e:\u003cspan style=\"color:#a6e22e\"\u003enetrw_banner\u003c/span\u003e = \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u0026#34;window サイズ\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003elet\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eg\u003c/span\u003e:\u003cspan style=\"color:#a6e22e\"\u003enetrw_winsize\u003c/span\u003e = \u003cspan style=\"color:#ae81ff\"\u003e25\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u0026#34;Netrw で Enter 押下時の挙動設定\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003elet\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eg\u003c/span\u003e:\u003cspan style=\"color:#a6e22e\"\u003enetrw_browse_split\u003c/span\u003e = \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003elet\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eg\u003c/span\u003e:\u003cspan style=\"color:#a6e22e\"\u003enetrw_alto\u003c/span\u003e = \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u0026#34;Netrw を toggle する関数を設定\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u0026#34;元処理と異なり Vex を呼び出すことで左 window に表示\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003elet\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eg\u003c/span\u003e:\u003cspan style=\"color:#a6e22e\"\u003eNetrwIsOpen\u003c/span\u003e=\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003efunction\u003c/span\u003e! \u003cspan style=\"color:#a6e22e\"\u003eToggleNetrw\u003c/span\u003e()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eg\u003c/span\u003e:\u003cspan style=\"color:#a6e22e\"\u003eNetrwIsOpen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003elet\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ei\u003c/span\u003e = \u003cspan style=\"color:#a6e22e\"\u003ebufnr\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;$\u0026#34;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003ewhile\u003c/span\u003e (\u003cspan style=\"color:#a6e22e\"\u003ei\u003c/span\u003e \u0026gt;= \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e (\u003cspan style=\"color:#a6e22e\"\u003egetbufvar\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003ei\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u0026amp;filetype\u0026#34;\u003c/span\u003e) == \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;netrw\u0026#34;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                \u003cspan style=\"color:#a6e22e\"\u003esilent\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eexe\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;bwipeout \u0026#34;\u003c/span\u003e . \u003cspan style=\"color:#a6e22e\"\u003ei\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#66d9ef\"\u003eendif\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#66d9ef\"\u003elet\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ei\u003c/span\u003e-=\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003eendwhile\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003elet\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eg\u003c/span\u003e:\u003cspan style=\"color:#a6e22e\"\u003eNetrwIsOpen\u003c/span\u003e=\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003elet\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eg\u003c/span\u003e:\u003cspan style=\"color:#a6e22e\"\u003eNetrwIsOpen\u003c/span\u003e=\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003esilent\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eVex\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eendif\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eendfunction\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u0026#34;ショートカットの設定\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u0026#34;= を 2 回連続押下で toggle \u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003enoremap\u003c/span\u003e \u0026lt;\u003cspan style=\"color:#a6e22e\"\u003esilent\u003c/span\u003e\u0026gt;== :\u003cspan style=\"color:#a6e22e\"\u003ecall\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eToggleNetrw\u003c/span\u003e()\u0026lt;\u003cspan style=\"color:#a6e22e\"\u003eCR\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e設定値の詳細や Netrw の操作方法は Vim の日本語ドキュメントで確認できます。\u003ccode\u003eP\u003c/code\u003e でファイルを開くことができます。\u003c/p\u003e","title":"vim の Netrw を NERDTree のような表示に設定"},{"content":"先日シェアオフィスに入居する当社の スペース移動（お引っ越し） をしました。その際に床面がコンクリート剥き出しだったため素人ながらクッションフロア を敷き込んでみた話をまとめます。\n本来なら業者さんに入ってもらう手段もあったのですが, 打ち合わせの時間が取れない状態だったので自分で頑張りました。\nクッションフロアとは 賃貸アパートなどの床材として利用されるフローリングの大体素材です。柔らかい。部屋の模様替えでも利用されるらしく, ホームセンターでも入手が可能です。\n材料自体が割安で傷がついても交換しやすい特徴があります。\n入手から施工まで 1. 床面積を測る 施工対象の部屋の床面積をスケールで計測します。今回は部屋サイズが 3.6 * 3.8(?) 程度のサイズでした。\n通常クッションフロア 1 枚の幅が 182 cm らしいので 2 枚ならべて敷き込めば良さそうです。\n2. クッションフロア と道具の発注 以前もお世話になったことがある DIYショップRESTA さんで材料を探しました。 できるだけ予算を安く仕上げたかったため次の商品に決定しました。\n抗菌・防カビ 東リ 住宅用クッションフロア (182cm巾 1.8mm厚)オーク CF9435～CF9437 | RESTA\nこの商品を 4m * 2 本注文。さらに施工道具がないので クッションフロア貼りセット を注文。\nクッションフロア を敷く為に必要な クッションフロア用両面テープ | RESTA を 45 m 分注文しました。両面テープの長さについては商品ページに詳しく説明してあったので助かりました。\n3. 掃除 施工対象の床面を掃除しました。掃除機を 2 度かけ念の為拭き掃除。\n4. 施工 クッションフロアの貼り方（張り方）両面テープ編｜DIYショップRESTA を見て頑張る。\nYouTube にも「クッションフロア 両面テープ」で施工例があるので事前に見て計画しておくと作業しやすいと思います。2 枚貼るだけでしたが 2h 近くかかりました。慣れればもっと早くできそうです。\n5. 施工後 一応掃除しました。新品と言えども施工中に埃がついたりするので必要です。\n感想 部屋のサイズがクションフロアのサイズと相性がよかったので助かった 材料が安く手に入ったので安く仕上げられた 作業しながら「ベンチャーっぽい〜」と思ったりした ","permalink":"https://issueoverflow.com/2019/09/05/putting-cushion-floors-on-the-office/","summary":"\u003cp\u003e先日シェアオフィスに入居する当社の \u003ca href=\"https://www.fillin-inc.com/releases/2019/09/05/announce-of-office-space-relocation/\"\u003eスペース移動（お引っ越し）\u003c/a\u003e をしました。その際に床面がコンクリート剥き出しだったため素人ながらクッションフロア を敷き込んでみた話をまとめます。\u003c/p\u003e\n\u003cp\u003e本来なら業者さんに入ってもらう手段もあったのですが, 打ち合わせの時間が取れない状態だったので自分で頑張りました。\u003c/p\u003e\n\u003ch2 id=\"クッションフロアとは\"\u003eクッションフロアとは\u003c/h2\u003e\n\u003cp\u003e賃貸アパートなどの床材として利用されるフローリングの大体素材です。柔らかい。部屋の模様替えでも利用されるらしく, ホームセンターでも入手が可能です。\u003c/p\u003e\n\u003cp\u003e材料自体が割安で傷がついても交換しやすい特徴があります。\u003c/p\u003e\n\u003ch2 id=\"入手から施工まで\"\u003e入手から施工まで\u003c/h2\u003e\n\u003ch3 id=\"1-床面積を測る\"\u003e1. 床面積を測る\u003c/h3\u003e\n\u003cp\u003e施工対象の部屋の床面積をスケールで計測します。今回は部屋サイズが 3.6 * 3.8(?) 程度のサイズでした。\u003c/p\u003e\n\u003cp\u003e通常クッションフロア 1 枚の幅が 182 cm らしいので 2 枚ならべて敷き込めば良さそうです。\u003c/p\u003e\n\u003ch3 id=\"2-クッションフロア-と道具の発注\"\u003e2. クッションフロア と道具の発注\u003c/h3\u003e\n\u003cp\u003e以前もお世話になったことがある \u003ca href=\"https://www.diy-shop.jp/\"\u003eDIYショップRESTA\u003c/a\u003e さんで材料を探しました。\nできるだけ予算を安く仕上げたかったため次の商品に決定しました。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.diy-shop.jp/item.php?cc=0000049894\"\u003e抗菌・防カビ 東リ 住宅用クッションフロア (182cm巾 1.8mm厚)オーク CF9435～CF9437 | RESTA\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eこの商品を 4m * 2 本注文。さらに施工道具がないので \u003ca href=\"https://www.diy-shop.jp/item.php?cc=0000028446\"\u003eクッションフロア貼りセット\u003c/a\u003e を注文。\u003c/p\u003e\n\u003cp\u003eクッションフロア を敷く為に必要な \u003ca href=\"https://www.diy-shop.jp/item.php?cc=0000002155\"\u003eクッションフロア用両面テープ | RESTA\u003c/a\u003e を 45 m 分注文しました。両面テープの長さについては商品ページに詳しく説明してあったので助かりました。\u003c/p\u003e\n\u003ch3 id=\"3-掃除\"\u003e3. 掃除\u003c/h3\u003e\n\u003cp\u003e施工対象の床面を掃除しました。掃除機を 2 度かけ念の為拭き掃除。\u003c/p\u003e\n\u003ch3 id=\"4-施工\"\u003e4. 施工\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.diy-shop.jp/info/diy_cf2.html\"\u003eクッションフロアの貼り方（張り方）両面テープ編｜DIYショップRESTA\u003c/a\u003e を見て頑張る。\u003c/p\u003e\n\u003cpicture\u003e\n            \u003csource\n                srcset=\"/2019/09/05/putting-cushion-floors-on-the-office/after_hu_c309eda18e8b756f.webp 480w, /2019/09/05/putting-cushion-floors-on-the-office/after_hu_761b6febacf5d67.webp 800w, /2019/09/05/putting-cushion-floors-on-the-office/after_hu_a8448365e9b2f32f.webp 802w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\n                type=\"image/webp\"\u003e\n            \u003cimg\n                src=\"/2019/09/05/putting-cushion-floors-on-the-office/after.jpg\"\n                alt=\"施工後\"\n                width=\"802\"\n                height=\"575\"\n                loading=\"lazy\"\n                decoding=\"async\"\n                srcset=\"/2019/09/05/putting-cushion-floors-on-the-office/after_hu_9834a34cde058026.jpg 480w, /2019/09/05/putting-cushion-floors-on-the-office/after_hu_4df1aea2cea9b26b.jpg 800w, /2019/09/05/putting-cushion-floors-on-the-office/after.jpg 802w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\u003e\n        \u003c/picture\u003e\n\u003cp\u003eYouTube にも「クッションフロア 両面テープ」で施工例があるので事前に見て計画しておくと作業しやすいと思います。2 枚貼るだけでしたが 2h 近くかかりました。慣れればもっと早くできそうです。\u003c/p\u003e","title":"オフィスにクッションフロア を貼る"},{"content":" 前回の記事 で Rails の Application Template を使ってみました。\nそれでも Rails プロジェクトを立ち上げるには手数が多く面倒だったので peco を使ってテンプレートを選択し初期化しようと思います。\n仕組み GitHub に Application Template を管理するリポジトリを用意 GitHub API を使って該当のリポジトリからテンプレート一覧を取得 peco を使ってテンプレートを選択 ローカルで rails new を実行 その他のファイルも管理できるようにテンプレートリ管理リポジトリを用意し専用ディレクトリを作りました。public なリポジトリであれば GitHub API でディレクトリ内のファイル一覧を取得できます。\nhttps://github.com/fillin-inc/templates\nコード 以下のコードを .zshrc でロードし zsh 上で呼び出します。\n# peco-rails-template.zsh function peco-rails-template() { # GitHub API からテンンプレート情報取得 local JSON=$(curl --silent https://api.github.com/repos/fillin-inc/templates/contents/rails | jq \u0026#39;.[]\u0026#39;) # template 名から選択 local TEMPLATE=$(echo ${JSON} | jq \u0026#39;.name\u0026#39; | grep \u0026#39;.rb\u0026#39; | sed -e \u0026#39;s/\u0026#34;//g\u0026#39; | sed -e \u0026#39;s/\\.rb$//\u0026#39; | peco) if [ -z ${TEMPLATE} ]; then echo \u0026#34;template が取得できませんでした\u0026#34; return 1 fi # name が該当する download_url 取得 local SELECTED=$(echo ${JSON} | jq \u0026#34;. | select (.name == \\\u0026#34;${TEMPLATE}.rb\\\u0026#34;) | .download_url\u0026#34; | sed -e \u0026#39;s/\u0026#34;//g\u0026#39;) if [ -z ${SELECTED} ]; then echo \u0026#34;選択された template に該当する download_url が取得できませんでした\u0026#34; return 1 fi # git 管理されていない場合, 空 commit if [ -d .git ]; then git init git commit --allow-empty -m \u0026#34;initial commit\u0026#34; fi # Gemfile が存在しない場合デフォルト適用 if [ ! -f \u0026#34;Gemfile\u0026#34; ]; then curl -O --silent https://raw.githubusercontent.com/fillin-inc/templates/master/rails/example/Gemfile fi # rails gem を install bundle i --without production # template 指定で new bundle exec rails new . --force -d mysql -m ${SELECTED} } 課題 この処理には Application Template を使う都合でいくつか不都合があります。\nbundle install 時にローカルに gem をインストールする DB の設定を常に MySQL に固定 ","permalink":"https://issueoverflow.com/2019/07/27/use-rails-application-template-with-peco/","summary":"\u003cimg\n            src=\"/2019/07/27/use-rails-application-template-with-peco/cli.gif\"\n            alt=\"cli image\"\n            \n            loading=\"lazy\"\n            decoding=\"async\"\u003e\n\u003cp\u003e\u003ca href=\"/2019/06/16/rails-application-template-for-v5.2/\"\u003e前回の記事\u003c/a\u003e で Rails の Application Template を使ってみました。\u003c/p\u003e\n\u003cp\u003eそれでも Rails プロジェクトを立ち上げるには手数が多く面倒だったので \u003ca href=\"https://github.com/peco/peco\"\u003epeco\u003c/a\u003e を使ってテンプレートを選択し初期化しようと思います。\u003c/p\u003e\n\u003ch2 id=\"仕組み\"\u003e仕組み\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eGitHub に Application Template を管理するリポジトリを用意\u003c/li\u003e\n\u003cli\u003eGitHub API を使って該当のリポジトリからテンプレート一覧を取得\u003c/li\u003e\n\u003cli\u003epeco を使ってテンプレートを選択\u003c/li\u003e\n\u003cli\u003eローカルで \u003ccode\u003erails new\u003c/code\u003e を実行\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eその他のファイルも管理できるようにテンプレートリ管理リポジトリを用意し専用ディレクトリを作りました。public なリポジトリであれば GitHub API でディレクトリ内のファイル一覧を取得できます。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/fillin-inc/templates\"\u003ehttps://github.com/fillin-inc/templates\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"コード\"\u003eコード\u003c/h2\u003e\n\u003cp\u003e以下のコードを \u003ccode\u003e.zshrc\u003c/code\u003e でロードし zsh 上で呼び出します。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# peco-rails-template.zsh\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003efunction\u003c/span\u003e peco-rails-template\u003cspan style=\"color:#f92672\"\u003e()\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75715e\"\u003e# GitHub API からテンンプレート情報取得\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  local JSON\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e$(\u003c/span\u003ecurl --silent https://api.github.com/repos/fillin-inc/templates/contents/rails | jq \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;.[]\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75715e\"\u003e# template 名から選択\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  local TEMPLATE\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e$(\u003c/span\u003eecho \u003cspan style=\"color:#e6db74\"\u003e${\u003c/span\u003eJSON\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e | jq \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;.name\u0026#39;\u003c/span\u003e | grep \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;.rb\u0026#39;\u003c/span\u003e | sed -e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;s/\u0026#34;//g\u0026#39;\u003c/span\u003e | sed -e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;s/\\.rb$//\u0026#39;\u003c/span\u003e | peco\u003cspan style=\"color:#66d9ef\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e -z \u003cspan style=\"color:#e6db74\"\u003e${\u003c/span\u003eTEMPLATE\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e; \u003cspan style=\"color:#66d9ef\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    echo \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;template が取得できませんでした\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75715e\"\u003e# name が該当する download_url 取得\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  local SELECTED\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e$(\u003c/span\u003eecho \u003cspan style=\"color:#e6db74\"\u003e${\u003c/span\u003eJSON\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e | jq \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;. | select (.name == \\\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e${\u003c/span\u003eTEMPLATE\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e.rb\\\u0026#34;) | .download_url\u0026#34;\u003c/span\u003e | sed -e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;s/\u0026#34;//g\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e -z \u003cspan style=\"color:#e6db74\"\u003e${\u003c/span\u003eSELECTED\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e; \u003cspan style=\"color:#66d9ef\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    echo \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;選択された template に該当する download_url が取得できませんでした\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75715e\"\u003e# git 管理されていない場合, 空 commit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e -d .git \u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e; \u003cspan style=\"color:#66d9ef\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    git init\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    git commit --allow-empty -m \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;initial commit\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75715e\"\u003e# Gemfile が存在しない場合デフォルト適用\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e ! -f \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Gemfile\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e; \u003cspan style=\"color:#66d9ef\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    curl -O --silent https://raw.githubusercontent.com/fillin-inc/templates/master/rails/example/Gemfile\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75715e\"\u003e# rails gem を install\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  bundle i --without production\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75715e\"\u003e# template 指定で new\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  bundle exec rails new . --force -d mysql -m \u003cspan style=\"color:#e6db74\"\u003e${\u003c/span\u003eSELECTED\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"課題\"\u003e課題\u003c/h2\u003e\n\u003cp\u003eこの処理には Application Template を使う都合でいくつか不都合があります。\u003c/p\u003e","title":"peco を使って Rails Application Template を選択する"},{"content":"Rails のアプリケーション環境をサクッと立ち上げるために Application Template を用意してみました。特徴としては, slim, rspec 初期化, rubocop の設定等々です。\nhttps://gist.github.com/yuya-matsushima/827903535cd97894df74c385fcdc30b4\n環境構築 docker-compose 環境の用意 Web サーバーなし, MySQL と Redis の image をベースに。\nversion: \u0026#39;3\u0026#39; services: app: image: fillininc/rails:2.6.3-18.04 volumes: - .:/opt/app - bundle:/usr/local/bundle ports: - 3000:3000 stdin_open: true depends_on: - db - redis db: image: mysql:8.0 command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci volumes: - database:/var/lib/mysql ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: app_development TZ: Asia/Tokyo redis: image: redis:5.0 ports: - 6379:6379 volumes: database: bundle: Gemfile を用意 source \u0026#39;https://rubygems.org\u0026#39; git_source(:github) { |repo| \u0026#34;https://github.com/#{repo}.git\u0026#34; } gem \u0026#39;rails\u0026#39;, \u0026#39;~\u0026gt; 5.2.3\u0026#39; Gem のインストール $ docker-compose run --rm app 起動した app 内の bash で下記コマンドを実行。\n-m に指定する URL は https://gist.github.com/yuya-matsushima/827903535cd97894df74c385fcdc30b4 の RAW。バージョンに注意。\n$ bundle i --without production $ bundle exec rails new . -d mysql -m https://gist.githubusercontent.com/yuya-matsushima/827903535cd97894df74c385fcdc30b4/raw/57832fecc737c9d03efbee85da06c29e363d66c4/template.rb 実行完了後に exit。\n起動 db/database.yml を環境に合わせ編集 $ docker-compose up -d で起動 作ってみて gem_group が既存の group に対して追加ではなく Gemfile に追記していくのがちょっと不満。しかし結局はコメントの削除や並び替えを行うので問題はない。\n","permalink":"https://issueoverflow.com/2019/06/16/rails-application-template-for-v5.2/","summary":"\u003cp\u003eRails のアプリケーション環境をサクッと立ち上げるために Application Template を用意してみました。特徴としては, slim, rspec 初期化, rubocop の設定等々です。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://gist.github.com/yuya-matsushima/827903535cd97894df74c385fcdc30b4\"\u003ehttps://gist.github.com/yuya-matsushima/827903535cd97894df74c385fcdc30b4\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"環境構築\"\u003e環境構築\u003c/h2\u003e\n\u003ch3 id=\"docker-compose-環境の用意\"\u003edocker-compose 環境の用意\u003c/h3\u003e\n\u003cp\u003eWeb サーバーなし, MySQL と Redis の image をベースに。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eversion: \u0026#39;3\u0026#39;\nservices:\n  app:\n    image: fillininc/rails:2.6.3-18.04\n    volumes:\n      - .:/opt/app\n      - bundle:/usr/local/bundle\n    ports:\n      - 3000:3000\n    stdin_open: true\n    depends_on:\n      - db\n      - redis\n  db:\n    image: mysql:8.0\n    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci\n    volumes:\n      - database:/var/lib/mysql\n    ports:\n      - 3306:3306\n    environment:\n      MYSQL_ROOT_PASSWORD: password\n      MYSQL_DATABASE: app_development\n      TZ: Asia/Tokyo\n  redis:\n    image: redis:5.0\n    ports:\n      - 6379:6379\n\nvolumes:\n  database:\n  bundle:\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"gemfile-を用意\"\u003eGemfile を用意\u003c/h3\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esource \u0026#39;https://rubygems.org\u0026#39;\ngit_source(:github) { |repo| \u0026#34;https://github.com/#{repo}.git\u0026#34; }\n\ngem \u0026#39;rails\u0026#39;, \u0026#39;~\u0026gt; 5.2.3\u0026#39;\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"gem-のインストール\"\u003eGem のインストール\u003c/h3\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ docker-compose run --rm app\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e起動した app 内の bash で下記コマンドを実行。\u003c/p\u003e","title":"Rails Application Template v5.2"},{"content":"Go 言語開発時に Vim の補完機能が上手く動作しないことが増えており非常にストレスフルな状態が続いていました。そこで最近話題の LSP (Laugnage Server Protocol) ベースの補完に移行することにしました。\n設定方法 主に vim-lsp とオートコンプリート機能を提供する asyncomplete.vim を vimrc ファイルに追加し各言語に対する Language Server の設定を追加していきます。\n\u0026#34;Plug でプラグインを管理する場合 Plug \u0026#39;prabirshrestha/async.vim\u0026#39; Plug \u0026#39;prabirshrestha/asyncomplete.vim\u0026#39; Plug \u0026#39;prabirshrestha/asyncomplete-lsp.vim\u0026#39; Plug \u0026#39;prabirshrestha/vim-lsp\u0026#39; Go 言語の場合は続けて次の設定を追加します。その他の言語については vim-lsp の wiki に対応方法が書いてあります。\nif executable(\u0026#39;go-langserver\u0026#39;) augroup LspGo au! au User lsp_setup call lsp#register_server({ \\ \u0026#39;name\u0026#39;: \u0026#39;go-langserver\u0026#39;, \\ \u0026#39;cmd\u0026#39;: {server_info-\u0026gt;[\u0026#39;go-langserver\u0026#39;, \u0026#39;-gocodecompletion\u0026#39;]}, \\ \u0026#39;whitelist\u0026#39;: [\u0026#39;go\u0026#39;], \\ }) au FileType go setlocal omnifunc=lsp#complete augroup END endif この設定を動作させるためには go-langserver のインストールが必要です。\n$ go get -u github.com/sourcegraph/go-langserver ハマったところ 最初は gopls を利用しようとしましたが, 私の環境では上手く動作しなかったため star 数が多い go-langserver を利用するようにしました。\n参考 Big Sky :: gocode やめます(そして Language Server へ)\n","permalink":"https://issueoverflow.com/2019/05/03/use-language-server-protocol-with-vim/","summary":"\u003cp\u003eGo 言語開発時に Vim の補完機能が上手く動作しないことが増えており非常にストレスフルな状態が続いていました。そこで最近話題の LSP (Laugnage Server Protocol) ベースの補完に移行することにしました。\u003c/p\u003e\n\u003ch2 id=\"設定方法\"\u003e設定方法\u003c/h2\u003e\n\u003cp\u003e主に \u003ca href=\"https://github.com/prabirshrestha/vim-lsp\"\u003evim-lsp\u003c/a\u003e とオートコンプリート機能を提供する \u003ca href=\"https://github.com/prabirshrestha/asyncomplete.vim\"\u003easyncomplete.vim\u003c/a\u003e を vimrc ファイルに追加し各言語に対する Language Server の設定を追加していきます。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026#34;Plug でプラグインを管理する場合\nPlug \u0026#39;prabirshrestha/async.vim\u0026#39;\nPlug \u0026#39;prabirshrestha/asyncomplete.vim\u0026#39;\nPlug \u0026#39;prabirshrestha/asyncomplete-lsp.vim\u0026#39;\nPlug \u0026#39;prabirshrestha/vim-lsp\u0026#39;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eGo 言語の場合は続けて次の設定を追加します。その他の言語については vim-lsp の \u003ca href=\"https://github.com/prabirshrestha/vim-lsp/wiki\"\u003ewiki\u003c/a\u003e に対応方法が書いてあります。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eif executable(\u0026#39;go-langserver\u0026#39;)\n  augroup LspGo\n    au!\n    au User lsp_setup call lsp#register_server({\n          \\ \u0026#39;name\u0026#39;: \u0026#39;go-langserver\u0026#39;,\n          \\ \u0026#39;cmd\u0026#39;: {server_info-\u0026gt;[\u0026#39;go-langserver\u0026#39;, \u0026#39;-gocodecompletion\u0026#39;]},\n          \\ \u0026#39;whitelist\u0026#39;: [\u0026#39;go\u0026#39;],\n          \\ })\n    au FileType go setlocal omnifunc=lsp#complete\n  augroup END\nendif\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eこの設定を動作させるためには go-langserver のインストールが必要です。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ go get -u github.com/sourcegraph/go-langserver\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"ハマったところ\"\u003eハマったところ\u003c/h2\u003e\n\u003cp\u003e最初は gopls を利用しようとしましたが, 私の環境では上手く動作しなかったため star 数が多い go-langserver を利用するようにしました。\u003c/p\u003e","title":"Vim で Language Server Protocol を使う"},{"content":"動作させているプログラムを動作させている環境が Docker コンテナ内か判定する必要に遭遇しました。ちょっとしたバッチ処理でしたが Docker 環境に限り設定を追加する必要がありました。\nどう対応していたか Dockerfile や docker-compose で ENV DOCKER_ENV=1 のように環境変数を設定していました。動作するプログラム内で環境変数を判定し設定を調整すれば対応できます。\nこの方法だと環境変数の指定忘れが起これば対象のプログラムは動作しなくなってしまいます。その他の方法がないか調べてみました。\n.dockerenv を使った判定 Docker コンテナを立ち上げた場合, root に /.dockerenv が生成されるようです。そこでこのファイルの存在判定で対応します。Ruby の場合であれば次のコードで判定することができます。\nif File.exist?(File.join(\u0026#39;/\u0026#39;, \u0026#39;.dockerenv\u0026#39;)) # Docker コンテナ上でのみ実行する処理 end 参考: 今の環境がDocker Containerとして動作しているかどうかをコマンドで調べる\nこれによって面倒な環境変数の管理が不要になりました。\n","permalink":"https://issueoverflow.com/2018/11/10/how-to-check-if-the-program-is-running-inside-the-dockers-container/","summary":"\u003cp\u003e動作させているプログラムを動作させている環境が Docker コンテナ内か判定する必要に遭遇しました。ちょっとしたバッチ処理でしたが Docker 環境に限り設定を追加する必要がありました。\u003c/p\u003e\n\u003ch2 id=\"どう対応していたか\"\u003eどう対応していたか\u003c/h2\u003e\n\u003cp\u003eDockerfile や docker-compose で \u003ccode\u003eENV DOCKER_ENV=1\u003c/code\u003e のように環境変数を設定していました。動作するプログラム内で環境変数を判定し設定を調整すれば対応できます。\u003c/p\u003e\n\u003cp\u003eこの方法だと環境変数の指定忘れが起これば対象のプログラムは動作しなくなってしまいます。その他の方法がないか調べてみました。\u003c/p\u003e\n\u003ch2 id=\"dockerenv-を使った判定\"\u003e\u003ccode\u003e.dockerenv\u003c/code\u003e を使った判定\u003c/h2\u003e\n\u003cp\u003eDocker コンテナを立ち上げた場合, root に \u003ccode\u003e/.dockerenv\u003c/code\u003e が生成されるようです。そこでこのファイルの存在判定で対応します。Ruby の場合であれば次のコードで判定することができます。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-ruby\" data-lang=\"ruby\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003eFile\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eexist?(\u003cspan style=\"color:#66d9ef\"\u003eFile\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ejoin(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;/\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;.dockerenv\u0026#39;\u003c/span\u003e))\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75715e\"\u003e# Docker コンテナ上でのみ実行する処理\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eend\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e参考: \u003ca href=\"https://techracho.bpsinc.jp/morimorihoge/2017_03_06/36503\"\u003e今の環境がDocker Containerとして動作しているかどうかをコマンドで調べる\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eこれによって面倒な環境変数の管理が不要になりました。\u003c/p\u003e","title":"プログラムが Docker コンテナ内で動作しているか判定する方法"},{"content":"react-redux でカウンターを作る - IssueOverflow を TypeScript 版を作成してみた。\nyuya-matsushima/react-redux-counter-ts\n作ってみてどうだったか vim は外部ライブラリの types (型) 情報が厳しいので素直に Visual Studio Code を使った @types で追加されている型情報はある程度頭に入れないと手間取る 慣れるまで大変そう ","permalink":"https://issueoverflow.com/2018/09/17/counter-with-typescript/","summary":"\u003cp\u003e\u003ca href=\"https://issueoverflow.com/2018/09/09/counter-with-react-redux/\"\u003ereact-redux でカウンターを作る - IssueOverflow\u003c/a\u003e を \u003ca href=\"https://typescriptlang.org\"\u003eTypeScript\u003c/a\u003e 版を作成してみた。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/yuya-matsushima/react-redux-counter-ts\"\u003eyuya-matsushima/react-redux-counter-ts\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"作ってみてどうだったか\"\u003e作ってみてどうだったか\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003evim は外部ライブラリの types (型) 情報が厳しいので素直に \u003ca href=\"https://code.visualstudio.com/\"\u003eVisual Studio Code\u003c/a\u003e を使った\u003c/li\u003e\n\u003cli\u003e@types で追加されている型情報はある程度頭に入れないと手間取る\u003c/li\u003e\n\u003cli\u003e慣れるまで大変そう\u003c/li\u003e\n\u003c/ul\u003e","title":"TypeScript でカウンターを作る"},{"content":"React と組み合わせて使う Redux, 特に react-redux の取り扱いがいまいちわからず困ってしまう自体が発生したので基本的な使い方を確認するためにカウンターを作ってみました。\nyuya-matsushima/react-redux-counter\nカウンターの動作自体は + ボタンででインクリメント, - ボタンでデクリメントするだけの簡単なものです。\n参考 React入門 React・Reduxの導入からサーバサイドレンダリングによるUXの向上まで（穴井宏幸 石井直矢 柴田和祈 三宮肇）｜翔泳社の本 ReactとReduxを結ぶパッケージ「react-redux」についてconnectの実装パターンを試す - Qiita 何がわからなかったのか ファイルの分割と機能 components ディレクトリと containers ディレクトリに配置するファイルの違い connect まわり mapStateToProps mapDispatchToProps 書籍と Qiita 記事のおかげでどうにか解決しましたが, もう少し使ってみる必要がありそうです。便利な機能がまだまだあるようなのでドキュメントの読み直しも必要です。\nサーバサイドからクライアントサイド, フロントエンドへ 私のスキルセットのほとんどはサーバサイドに降って来たため, フロントエンドのキャッチアップが全体的に遅れています。短期間で集中してフロント側のスキルセットやツール, サービス利用方法を身につけていきたいと思っています。\nただし, react + redux + Rails or Go みたいな案件で一緒にコードがかける人が群馬にいないのでかなり問題だ。\n","permalink":"https://issueoverflow.com/2018/09/09/counter-with-react-redux/","summary":"\u003cp\u003eReact と組み合わせて使う Redux, 特に \u003ca href=\"https://github.com/reduxjs/react-redux\"\u003ereact-redux\u003c/a\u003e の取り扱いがいまいちわからず困ってしまう自体が発生したので基本的な使い方を確認するためにカウンターを作ってみました。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/yuya-matsushima/react-redux-counter\"\u003eyuya-matsushima/react-redux-counter\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eカウンターの動作自体は + ボタンででインクリメント, - ボタンでデクリメントするだけの簡単なものです。\u003c/p\u003e\n\u003ch2 id=\"参考\"\u003e参考\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.shoeisha.co.jp/book/detail/9784798153353\"\u003eReact入門 React・Reduxの導入からサーバサイドレンダリングによるUXの向上まで（穴井宏幸 石井直矢 柴田和祈 三宮肇）｜翔泳社の本\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://qiita.com/MegaBlackLabel/items/df868e734d199071b883\"\u003eReactとReduxを結ぶパッケージ「react-redux」についてconnectの実装パターンを試す - Qiita\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"何がわからなかったのか\"\u003e何がわからなかったのか\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eファイルの分割と機能\u003c/li\u003e\n\u003cli\u003ecomponents ディレクトリと containers ディレクトリに配置するファイルの違い\u003c/li\u003e\n\u003cli\u003econnect まわり\n\u003cul\u003e\n\u003cli\u003emapStateToProps\u003c/li\u003e\n\u003cli\u003emapDispatchToProps\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e書籍と Qiita 記事のおかげでどうにか解決しましたが, もう少し使ってみる必要がありそうです。便利な機能がまだまだあるようなのでドキュメントの読み直しも必要です。\u003c/p\u003e\n\u003ch2 id=\"サーバサイドからクライアントサイド-フロントエンドへ\"\u003eサーバサイドからクライアントサイド, フロントエンドへ\u003c/h2\u003e\n\u003cp\u003e私のスキルセットのほとんどはサーバサイドに降って来たため, フロントエンドのキャッチアップが全体的に遅れています。短期間で集中してフロント側のスキルセットやツール, サービス利用方法を身につけていきたいと思っています。\u003c/p\u003e\n\u003cp\u003eただし, react + redux + Rails or Go みたいな案件で一緒にコードがかける人が群馬にいないのでかなり問題だ。\u003c/p\u003e","title":"react-redux でカウンターを作る"},{"content":"React を使うにあたり, というか最近の JS の開発を行う場合 WebPack + Babel の環境を用意して, さらに JS フレームワークを追加し設定を書いて\u0026hellip;といった煩雑な手続きが必要です。\nReact の場合 create-react-app という便利コマンドでサクッと開発環境を作ることができます。ただし, create-react-app でプロジェクトを始めた場合, 余計なファイルを同時に作ってしまい練習用にはお節介がすぎる感があります。\nそこで create-react-app で採用されている react-scripts を使って必要なところだけ楽をする。をしてみました。\n手順 初期化を適当に実行。\n$ npm init npm で必要なパッケージを追加します。\n$ npm i -D react-scripts $ npm i react react-dom npm に必要なコマンド定義を追加します。\n\u0026#34;scripts\u0026#34;: { \u0026#34;start\u0026#34;: \u0026#34;react-scripts start\u0026#34;, \u0026#34;build\u0026#34;: \u0026#34;react-scripts build\u0026#34;, \u0026#34;eject\u0026#34;: \u0026#34;react-scripts eject\u0026#34;, \u0026#34;test\u0026#34;: \u0026#34;react-scripts test\u0026#34; }, react-scripts には特定のディレクトリやファイルが必要らしいので最低限作ります。\n$ mkdir -p public src $ touch public/index.html $ touch src/index.js package.json に追加した start を実行すると public/index.html を index として開発サーバが起動されます。このファイルを編集します。\n\u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;utf-8\u0026#34;\u0026gt; \u0026lt;meta name=\u0026#34;viewport\u0026#34; content=\u0026#34;width=device-width,initial-scale=1\u0026#34;\u0026gt; \u0026lt;title\u0026gt;example\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;div id=\u0026#34;root\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; この HTML には JS の読み込み処理は追加しなくていいらしい。react-scripts が面倒を見てくれるようです。\nあとは src/index.js に React のコードを追加し開発サーバを起動すれば完了です。\nimport React from \u0026#39;react\u0026#39;; import ReactDOM from \u0026#39;react-dom\u0026#39;; ReactDOM.render( \u0026lt;p\u0026gt;hogehoge\u0026lt;/p\u0026gt;, document.getElementById(\u0026#39;root\u0026#39;) ); $ npm start サンプル 試しに簡単なフォームを作って見ました。 https://github.com/yuya-matsushima/react-form-sample\n最後に react-scripts は結構いろいろやってくれるようで便利です。やってみた結果としては素直に create-react-app を使う方針の方が楽そうです。\nReact (というか最近のフロントエンド) は環境を作るのが面倒で敬遠しがちだったのですが, 簡単に始める方法があるようなので頑張っていきたいと思います。\n","permalink":"https://issueoverflow.com/2018/08/02/use-react-easily-with-react-scripts/","summary":"\u003cp\u003eReact を使うにあたり, というか最近の JS の開発を行う場合 WebPack + Babel の環境を用意して, さらに JS フレームワークを追加し設定を書いて\u0026hellip;といった煩雑な手続きが必要です。\u003c/p\u003e\n\u003cp\u003eReact の場合 \u003ca href=\"https://github.com/facebook/create-react-app\"\u003ecreate-react-app\u003c/a\u003e という便利コマンドでサクッと開発環境を作ることができます。ただし, \u003ccode\u003ecreate-react-app\u003c/code\u003e でプロジェクトを始めた場合, 余計なファイルを同時に作ってしまい練習用にはお節介がすぎる感があります。\u003c/p\u003e\n\u003cp\u003eそこで \u003ccode\u003ecreate-react-app\u003c/code\u003e で採用されている \u003ca href=\"https://www.npmjs.com/package/react-scripts\"\u003ereact-scripts\u003c/a\u003e を使って必要なところだけ楽をする。をしてみました。\u003c/p\u003e\n\u003ch2 id=\"手順\"\u003e手順\u003c/h2\u003e\n\u003cp\u003e初期化を適当に実行。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ npm init\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003enpm で必要なパッケージを追加します。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ npm i -D react-scripts\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ npm i react react-dom\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003enpm に必要なコマンド定義を追加します。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-json\" data-lang=\"json\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;scripts\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e:\u003c/span\u003e {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003e\u0026#34;start\u0026#34;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;react-scripts start\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003e\u0026#34;build\u0026#34;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;react-scripts build\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003e\u0026#34;eject\u0026#34;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;react-scripts eject\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003e\u0026#34;test\u0026#34;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;react-scripts test\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  }\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ereact-scripts には特定のディレクトリやファイルが必要らしいので最低限作ります。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ mkdir -p public src\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ touch public/index.html \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ touch src/index.js\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003ccode\u003epackage.json\u003c/code\u003e に追加した \u003ccode\u003estart\u003c/code\u003e を実行すると \u003ccode\u003epublic/index.html\u003c/code\u003e を index として開発サーバが起動されます。このファイルを編集します。\u003c/p\u003e","title":"react-scripts で簡単に React を使う"},{"content":"自社サービスや受託開発で利用する Docker イメージを見直しています。MySQL 用のイメージや Rails 用イメージを見直したところ, CircleCI 上でテストを実行する際に MySQL に接続できずテストが落ちる現象が発生しました。\nテストが落ちた原因 MySQL の ENTRYPOINT の処理を見直した結果, MySQL が起動する前にデータベースへ接続しようとし, 結果接続できず落ちる状態でした。\n変更前の ENTRYPOINT では最低限の処理だけ行い, その他の設定処理は起動後に外側から command を使って実行していました。見直しによって ENTRYPOINT 側で対応する処理を増やしたため初期化に時間がかかるようになってしまった模様。\n対応 とりあえずの対応として, MySQL の初期化が完了するまでの時間として SLEEP 10 をとりあえず追加しました。(よくない)\nDockerize 本来であれば Dockerize を用いるのが良さそうです。\n[Configuring Databases - CircleCI](https://circleci.com/docs/2.0/databases/# using-dockerize-to-wait-for-dependencies) [Database Configuration Examples - CircleCI](https://circleci.com/docs/2.0/postgres-config/# example-ruby-project-with-mysql-and-dockerize) 複数のコンテナを組み合わせて利用する場合は dockerize をイメージに含めておくと良さそうです。CircleCI が提供しているイメージにはインストールされているらしい。\n[Using Custom-Built Docker Images](https://circleci.com/docs/2.0/custom-images/# required-tools-for-primary-containers) のリストにはなかったので見逃していました。一緒に書いておいて欲しかった。\n今回に限っては SLEEP 10 でお茶を濁して, 次回以降の見直し時に対応しようと思います。\n","permalink":"https://issueoverflow.com/2018/07/29/dockerize-with-circleci2.0/","summary":"\u003cp\u003e自社サービスや受託開発で利用する Docker イメージを見直しています。MySQL 用のイメージや Rails 用イメージを見直したところ, CircleCI 上でテストを実行する際に MySQL に接続できずテストが落ちる現象が発生しました。\u003c/p\u003e\n\u003ch2 id=\"テストが落ちた原因\"\u003eテストが落ちた原因\u003c/h2\u003e\n\u003cp\u003eMySQL の \u003ccode\u003eENTRYPOINT\u003c/code\u003e の処理を見直した結果, MySQL が起動する前にデータベースへ接続しようとし, 結果接続できず落ちる状態でした。\u003c/p\u003e\n\u003cp\u003e変更前の \u003ccode\u003eENTRYPOINT\u003c/code\u003e では最低限の処理だけ行い, その他の設定処理は起動後に外側から \u003ccode\u003ecommand\u003c/code\u003e を使って実行していました。見直しによって \u003ccode\u003eENTRYPOINT\u003c/code\u003e 側で対応する処理を増やしたため初期化に時間がかかるようになってしまった模様。\u003c/p\u003e\n\u003ch2 id=\"対応\"\u003e対応\u003c/h2\u003e\n\u003cp\u003eとりあえずの対応として, MySQL の初期化が完了するまでの時間として \u003ccode\u003eSLEEP 10\u003c/code\u003e をとりあえず追加しました。(よくない)\u003c/p\u003e\n\u003ch2 id=\"dockerize\"\u003eDockerize\u003c/h2\u003e\n\u003cp\u003e本来であれば \u003ca href=\"https://github.com/jwilder/dockerize\"\u003eDockerize\u003c/a\u003e を用いるのが良さそうです。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e[Configuring Databases - CircleCI](\u003ca href=\"https://circleci.com/docs/2.0/databases/#\"\u003ehttps://circleci.com/docs/2.0/databases/#\u003c/a\u003e using-dockerize-to-wait-for-dependencies)\u003c/li\u003e\n\u003cli\u003e[Database Configuration Examples - CircleCI](\u003ca href=\"https://circleci.com/docs/2.0/postgres-config/#\"\u003ehttps://circleci.com/docs/2.0/postgres-config/#\u003c/a\u003e example-ruby-project-with-mysql-and-dockerize)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e複数のコンテナを組み合わせて利用する場合は dockerize をイメージに含めておくと良さそうです。CircleCI が提供しているイメージにはインストールされているらしい。\u003c/p\u003e\n\u003cp\u003e[Using Custom-Built Docker Images](\u003ca href=\"https://circleci.com/docs/2.0/custom-images/#\"\u003ehttps://circleci.com/docs/2.0/custom-images/#\u003c/a\u003e required-tools-for-primary-containers) のリストにはなかったので見逃していました。一緒に書いておいて欲しかった。\u003c/p\u003e\n\u003cp\u003e今回に限っては \u003ccode\u003eSLEEP 10\u003c/code\u003e でお茶を濁して, 次回以降の見直し時に対応しようと思います。\u003c/p\u003e","title":"CircleCI 2.0 用にカスタムイメージを用意する場合は dockerize 入れといた方がよさそう"},{"content":"長らく hugo-zen というテーマを使ってきましたが, もう少し見た目を華やかにしていこうということでテーマを変更しました。\n変更後のテーマは Robust です。\n投稿ごとの画像設定が可能で, 尚且つ AMP 対応もしている!! あたりが選定理由です。\nテーマを上書きしたところ Hugo のテーマはファイルを上書きする機能をもっています。WordPress でいうところの子テーマみたいなものでしょうか? テーマ変更にあたっていくつか変更が必要だったので調整しました。\n検索フォーム追加 LazySearch の JS ファイル読み込み追加 CSS を少し調整 基本的にはベースのままで追加機能分を調整した形です。あらかじめ空のパーシャルが用意されている箇所があって変更も簡単でした。\nこれから もう少し頑張って更新していく。\n","permalink":"https://issueoverflow.com/2018/07/21/theme-changed-to-robust/","summary":"\u003cp\u003e長らく hugo-zen というテーマを使ってきましたが, もう少し見た目を華やかにしていこうということでテーマを変更しました。\u003c/p\u003e\n\u003cp\u003e変更後のテーマは \u003ca href=\"https://themes.gohugo.io/robust/\"\u003eRobust\u003c/a\u003e です。\u003c/p\u003e\n\u003cp\u003e投稿ごとの画像設定が可能で, 尚且つ AMP 対応もしている!! あたりが選定理由です。\u003c/p\u003e\n\u003ch2 id=\"テーマを上書きしたところ\"\u003eテーマを上書きしたところ\u003c/h2\u003e\n\u003cp\u003eHugo のテーマはファイルを上書きする機能をもっています。WordPress でいうところの子テーマみたいなものでしょうか? テーマ変更にあたっていくつか変更が必要だったので調整しました。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e検索フォーム追加\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://lazysear.ch\"\u003eLazySearch\u003c/a\u003e の JS ファイル読み込み追加\u003c/li\u003e\n\u003cli\u003eCSS を少し調整\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e基本的にはベースのままで追加機能分を調整した形です。あらかじめ空のパーシャルが用意されている箇所があって変更も簡単でした。\u003c/p\u003e\n\u003ch2 id=\"これから\"\u003eこれから\u003c/h2\u003e\n\u003cp\u003eもう少し頑張って更新していく。\u003c/p\u003e","title":"Hugo のテーマを変更しました"},{"content":"昨年頭に書いた 2017年版の高崎市内のシェアオフィス記事 が SEO 的に良い位置におり, 更新されないと都合が悪い人がいそうなので 2018 年版を書いてみます。\nあいうえお順, シェアオフィスを公式にうたっている事業者を中心にまとめています。\nIPPO URL: https://shimizu-shoji.com/lp/\n所在地: 高崎市問屋町西 高崎問屋町駅から少し歩く距離で国道 17 号線にも近く, 特に車を使って頻繁に移動される方には嬉しい立地です。お値段的には他のシェアオフィスよりも割高感がありますが, Web サイトを見る限り設備も新しく, 個室, 駐車場, 24 時間いつでも利用できるようです。\n9 月に拡張されるようなので気になる方は問い合わせると良さそう。\n拡張のお知らせ 9 月ごろオープン: https://shimizu-shoji.com/news/693/\nSomethin\u0026rsquo; Else URL: https://somethingelse.jp/\n所在地: 高崎市小八木町 2017 年版では「起業家の森」として紹介させていただきましたが, その後管理運営が Somethin\u0026rsquo; Else さんになりました。 ワンデスク, バーチャルオフィス, レンタル会議室, マンスリー契約, さらにコワーキングスペースとして運営されています。昨年は Go 言語の勉強会 Takasaki.go でもお世話になりました。\n立地としては最寄の井野駅からはかなり歩きます。代わりに駐車場が充実しているので車を常用する群馬県民にはぴったりかもしれません。オープンスペースを中心に半個室, 会議室と充実しています。\nshine URL: https://shine.issha-grow.com/\n所在地: 高崎市本町 数日前に Web サイトができたばかりです。弊社は現在こちらのシェアオフィスに入居しています。高崎中央銀座の外れ, 飲み屋街が途切れた先にあります。立地のわりに個室なのに賃料は格安で, どういうわけか賃料にいろいろな料金が含まれており助かっています。\n24 時間土日に限らず好きな時間に利用させていただいています。コンビニや飲食店が近いので便利です。新たにバーチャルオフィスを始められたとのことです。個室も 1 部屋空いているので気になる方は Web サイトからお問い合わせしてみてください。\nSOHO ガーデン高崎 URL: https://www.takasaki-urbanhotel.com/contents/soho/\n所在地: 高崎市八島町 高崎駅西口にひっそりと存在するシェアオフィスです。高崎アーバンホテルの中にあります。4 月までお世話になっていました。\n高崎駅からすぐの場所にあり私書箱に登記可能, 基本 24 時間利用可, ただしインキュベーション施設の立ち位置なので利用できるのは最大 2 年というルールがあります。空いていれば会議室スペースも利用できました。オープンスペースを共用する形になっていますが, 滅多に人がいないので伸び伸びと利用させていただきました。ただ, 駅前で人気がありすぎるようで満員の模様。\n高崎インキュベーションオフィス URL: https://takasaki-share.com/\n所在地: 高崎市通町 SOHO ガーデン高崎に続き, 高崎駅に近い施設です。このオフィスの運営母体は元々前橋を中心に事業を展開していた VSI さんのようです。24 時間営業ではりませんが, 10:00〜06:00 ということで夜中まで作業するには十分な時間ですね。多分\u0026hellip;オープンスペース?\n立地は高崎市内でも飲食店が立ち並ぶ地域で便利です。駐車場を使われる場合は別途駐車場を契約するか, コインパーキングを利用する必要がでてくるかと思います。\n高崎産業創造館 URL: https://www.sansoukan.jp/\n所在地: 高崎市下之城町 市のインキュベーション施設です。立地が高崎市街地から大きく離れており, 最寄駅は倉賀野駅。車がないと利用は不便な場所です。 タイミングがあえば安く利用できるようなので検討の余地ありです。\n最後に 振り返ると 1.5 年の間にシェアオフィスが 2 件増えていました。少しずつですが起業しやすい環境になってきているのではないでしょうか? 入居者あつめてイベントやったら楽しそう。営業的に。\n","permalink":"https://issueoverflow.com/2018/07/19/takasaki-share-office-information-2018/","summary":"\u003cp\u003e昨年頭に書いた \u003ca href=\"https://issueoverflow.com/2017/01/20/takasaki-share-office-information-2017/\"\u003e2017年版の高崎市内のシェアオフィス記事\u003c/a\u003e が SEO 的に良い位置におり, 更新されないと都合が悪い人がいそうなので 2018 年版を書いてみます。\u003c/p\u003e\n\u003cp\u003eあいうえお順, シェアオフィスを公式にうたっている事業者を中心にまとめています。\u003c/p\u003e\n\u003ch2 id=\"ippo\"\u003eIPPO\u003c/h2\u003e\n\u003cdiv style=\"margin-bottom: 1.5em\"\u003e\nURL: \u003ca href=\"https://shimizu-shoji.com/lp/\"\u003ehttps://shimizu-shoji.com/lp/\u003c/a\u003e\u003cbr\u003e\n所在地: 高崎市問屋町西\n\u003c/div\u003e\n\u003cp\u003e高崎問屋町駅から少し歩く距離で国道 17 号線にも近く, 特に車を使って頻繁に移動される方には嬉しい立地です。お値段的には他のシェアオフィスよりも割高感がありますが, Web サイトを見る限り設備も新しく, 個室, 駐車場, 24 時間いつでも利用できるようです。\u003c/p\u003e\n\u003cp\u003e9 月に拡張されるようなので気になる方は問い合わせると良さそう。\u003cbr\u003e\n拡張のお知らせ 9 月ごろオープン: \u003ca href=\"https://shimizu-shoji.com/news/693/\"\u003ehttps://shimizu-shoji.com/news/693/\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"somethin-else\"\u003eSomethin\u0026rsquo; Else\u003c/h2\u003e\n\u003cdiv style=\"margin-bottom: 1.5em\"\u003e\nURL: \u003ca href=\"https://somethingelse.jp/\"\u003ehttps://somethingelse.jp/\u003c/a\u003e\u003cbr\u003e\n所在地: 高崎市小八木町\n\u003c/div\u003e\n\u003cp\u003e2017 年版では「起業家の森」として紹介させていただきましたが, その後管理運営が Somethin\u0026rsquo; Else さんになりました。\nワンデスク, バーチャルオフィス, レンタル会議室, マンスリー契約, さらにコワーキングスペースとして運営されています。昨年は Go 言語の勉強会 Takasaki.go でもお世話になりました。\u003c/p\u003e\n\u003cp\u003e立地としては最寄の井野駅からはかなり歩きます。代わりに駐車場が充実しているので車を常用する群馬県民にはぴったりかもしれません。オープンスペースを中心に半個室, 会議室と充実しています。\u003c/p\u003e\n\u003ch2 id=\"shine\"\u003eshine\u003c/h2\u003e\n\u003cdiv style=\"margin-bottom: 1.5em\"\u003e\nURL: \u003ca href=\"https://shine.issha-grow.com/\"\u003ehttps://shine.issha-grow.com/\u003c/a\u003e\u003cbr\u003e\n所在地: 高崎市本町\n\u003c/div\u003e\n\u003cp\u003e数日前に Web サイトができたばかりです。弊社は現在こちらのシェアオフィスに入居しています。高崎中央銀座の外れ, 飲み屋街が途切れた先にあります。立地のわりに個室なのに賃料は格安で, どういうわけか賃料にいろいろな料金が含まれており助かっています。\u003c/p\u003e\n\u003cp\u003e24 時間土日に限らず好きな時間に利用させていただいています。コンビニや飲食店が近いので便利です。新たにバーチャルオフィスを始められたとのことです。個室も 1 部屋空いているので気になる方は Web サイトからお問い合わせしてみてください。\u003c/p\u003e\n\u003ch2 id=\"soho-ガーデン高崎\"\u003eSOHO ガーデン高崎\u003c/h2\u003e\n\u003cdiv style=\"margin-bottom: 1.5em\"\u003e\nURL: \u003ca href=\"https://www.takasaki-urbanhotel.com/contents/soho/\"\u003ehttps://www.takasaki-urbanhotel.com/contents/soho/\u003c/a\u003e\u003cbr\u003e\n所在地: 高崎市八島町\n\u003c/div\u003e\n\u003cp\u003e高崎駅西口にひっそりと存在するシェアオフィスです。高崎アーバンホテルの中にあります。4 月までお世話になっていました。\u003c/p\u003e","title":"高崎シェアオフィス情報 2018"},{"content":"長らく開発環境は Vagrant + VirtualBox でした。このところ CircleCI 2.0 への移行 をきっかけに開発環境も docker 化(docker-compose 化) をすすめています。\nVagrant 利用時の問題点 開発環境を維持していくためにプロビジョニングの整備が必要でした。流行り廃りの中で Chef, Itamae, 最終的に Ansible と使用するツールを変えてきました。\nプロビジョニング実行時には, 運用ポリシーにもよりますが, 適用前後の状態変化をチェックするコードを用意しなければならない場合がありました。例えば Go のバージョンのみ変更したい場合, インストール済みの Go のバージョンをチェックし新たにインストールしたいバージョンと差異があるか確認, 必要があればインストールを実行といった具合です。\nまた, ミドルウェアのバージョンアップにあわせて各自のローカル環境でプロビジョニングを実行する必要がありました。それぞれのマシンで実行するため総時間としてはそれなりの時間が必要です。\ndocker-compose に移行した結果 メリット docker イメージの作成のみ考えればよく, 既存の状態チェックを意識せずに済む イメージにして Docker Hub 等に置けば各ローカル環境でプロビジョニング作業は不要 Vagrant + VirtualBox よりもメモリの消費が少ない CI 環境を含めて考えれば環境構築の手間が浮く プロダクションのサーバ環境まで面倒みれると最高っぽい デメリット docker-compose の操作を覚える必要がある 複数のコンテナを管理する必要があり煩雑 DB やアプリサービスごとに bash で入って状態をチェックする場合がある 通常のサーバ環境を念頭において作業するとわかりづらい 迷ったこと 特定のプロジェクトにおいて, MySQL のユーザ追加等をイメージ側で管理するか否か 汎用性を重視し, $ docker-compose up をラップした Rake タスクでユーザ追加で対応中 実際に開発環境に採用してみて もっとも助かっているのはメモリ使用量が減ったことです。\n使い始めた当初は通常のサーバと異なり, 各サービスごとに作ったコンテナに入って作業する必要があり混乱しました。しかし慣れてしまえば大した問題ではなく, CI 環境との兼ね合いを考えれば大したコストではありませんでした。\n一点問題として, デザイナーさんが関わる案件の場合, 現実的に運用できるか疑問が残っています。docker-compose のコマンド体系をある程度把握してもらう必要がでてくるためです。Git/GitHub や Gulp, WebPack が必要な環境において, そういったコマンドの習得コストをどのように考えるべきか悩ましいです。\n最後に docker は存在をしりつつ本格的な導入は遅いタイミングになってしまいました。次回から開発環境は基本 docker ベースでやっていきたいと思います。\n","permalink":"https://issueoverflow.com/2018/05/27/moving-the-development-environment-from-vagrant-to-docker-compose/","summary":"\u003cp\u003e長らく開発環境は \u003ca href=\"https://www.vagrantup.com/\"\u003eVagrant\u003c/a\u003e + \u003ca href=\"https://www.virtualbox.org/\"\u003eVirtualBox\u003c/a\u003e でした。このところ \u003ca href=\"https://issueoverflow.com/2018/05/04/deploy-a-site-created-with-middleman-on-s3--cloudfront-using-circleci-2.0/\"\u003eCircleCI 2.0 への移行\u003c/a\u003e をきっかけに開発環境も docker 化(docker-compose 化) をすすめています。\u003c/p\u003e\n\u003ch2 id=\"vagrant-利用時の問題点\"\u003eVagrant 利用時の問題点\u003c/h2\u003e\n\u003cp\u003e開発環境を維持していくためにプロビジョニングの整備が必要でした。流行り廃りの中で \u003ca href=\"https://www.chef.io/chef/\"\u003eChef\u003c/a\u003e, \u003ca href=\"https://github.com/itamae-kitchen/itamae\"\u003eItamae\u003c/a\u003e, 最終的に \u003ca href=\"https://www.ansible.com/\"\u003eAnsible\u003c/a\u003e と使用するツールを変えてきました。\u003c/p\u003e\n\u003cp\u003eプロビジョニング実行時には, 運用ポリシーにもよりますが, 適用前後の状態変化をチェックするコードを用意しなければならない場合がありました。例えば Go のバージョンのみ変更したい場合, インストール済みの Go のバージョンをチェックし新たにインストールしたいバージョンと差異があるか確認, 必要があればインストールを実行といった具合です。\u003c/p\u003e\n\u003cp\u003eまた, ミドルウェアのバージョンアップにあわせて各自のローカル環境でプロビジョニングを実行する必要がありました。それぞれのマシンで実行するため総時間としてはそれなりの時間が必要です。\u003c/p\u003e\n\u003ch2 id=\"docker-compose-に移行した結果\"\u003edocker-compose に移行した結果\u003c/h2\u003e\n\u003ch3 id=\"メリット\"\u003eメリット\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edocker イメージの作成のみ考えればよく, 既存の状態チェックを意識せずに済む\u003c/li\u003e\n\u003cli\u003eイメージにして \u003ca href=\"https://hub.docker.com/\"\u003eDocker Hub\u003c/a\u003e 等に置けば各ローカル環境でプロビジョニング作業は不要\u003c/li\u003e\n\u003cli\u003eVagrant + VirtualBox よりもメモリの消費が少ない\u003c/li\u003e\n\u003cli\u003eCI 環境を含めて考えれば環境構築の手間が浮く\n\u003cul\u003e\n\u003cli\u003eプロダクションのサーバ環境まで面倒みれると最高っぽい\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"デメリット\"\u003eデメリット\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edocker-compose の操作を覚える必要がある\u003c/li\u003e\n\u003cli\u003e複数のコンテナを管理する必要があり煩雑\n\u003cul\u003e\n\u003cli\u003eDB やアプリサービスごとに bash で入って状態をチェックする場合がある\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e通常のサーバ環境を念頭において作業するとわかりづらい\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"迷ったこと\"\u003e迷ったこと\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e特定のプロジェクトにおいて, MySQL のユーザ追加等をイメージ側で管理するか否か\n\u003cul\u003e\n\u003cli\u003e汎用性を重視し, \u003ccode\u003e$ docker-compose up\u003c/code\u003e をラップした Rake タスクでユーザ追加で対応中\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"実際に開発環境に採用してみて\"\u003e実際に開発環境に採用してみて\u003c/h2\u003e\n\u003cp\u003eもっとも助かっているのはメモリ使用量が減ったことです。\u003c/p\u003e\n\u003cp\u003e使い始めた当初は通常のサーバと異なり, 各サービスごとに作ったコンテナに入って作業する必要があり混乱しました。しかし慣れてしまえば大した問題ではなく, CI 環境との兼ね合いを考えれば大したコストではありませんでした。\u003c/p\u003e\n\u003cp\u003e一点問題として, デザイナーさんが関わる案件の場合, 現実的に運用できるか疑問が残っています。docker-compose のコマンド体系をある程度把握してもらう必要がでてくるためです。Git/GitHub や Gulp, WebPack が必要な環境において, そういったコマンドの習得コストをどのように考えるべきか悩ましいです。\u003c/p\u003e","title":"開発環境を Vagrant から docker-compose に移行する"},{"content":"自分の会社のサイトは創立以来 Middleman で管理運用しています。これまでは CircleCI 1.0 の機能を利用して AWS S3 にデプロイし CloudFront のキャッシュをクリアする構成になっていました。\nCircleCI 1.0 が 2018 年 8 月末日で利用できなくなるため 2.0 に変更する必要がありました。\nCircleCI 1.0 End of Life on August 31, 2018\nCircleCI 2.0 対応にやったこと CircleCI 2.0 のドキュメントの確認 Middleman がビルドできる Docker イメージ作成 circle.yml を .circleci/config.yml に変更 CircleCI 2.0 を利用するには Docker イメージが必要です。CircleCI が用意しているイメージを利用する方法もあります。\nPre-Built CircleCI Docker Images - CircleCI\n今回は Docker の学習も兼ねて自分で Docker イメージを用意することにしました。\nDocker イメージの作り方 できたもの:\nDocker Hub: yuya-matsushima/middleman GitHub yuya-matsushima/docker-middleman 依存イメージ: yuya-matsushima/docker-ruby 今回は Ubuntu 16.04 をベースに Ruby, NodeJS + Yarn が動作するイメージを作成しました。自分でイメージを作成する場合は必須となるパッケージがあるので注意が必要です。Ubuntu 16.04 の場合は例えば ca-certificates は必須です。\n必要なパッケージについてはドキュメントに記述があります。Using Custom-Built Docker Images - CircleCI\n今回はこれに加え, aws コマンドを追加しています。CloudFront の invalidate 処理に必要になります。問題なくビルドが完了したら Docker Hub に push して完了です。\n.circleci/config.yml の記述 .circleci/config.yml\nCircleCI 2.0 の設定ファイルは主に次の記述が必要です。\njob による実行タスクの定義 Docker イメージの指定 テストやビルドの実行 workflow による job の呼び出し job の呼び出し順の指定 動作する branch 条件の指定 静的サイトのビルド\u0026amp;\u0026amp;デプロイであれば, build + deploy 2 つの job を定義, workflow で master ブランチの場合のみ deploy を呼び出しの形になります。\nしかし, 今回は middleman-s3_sync を使う都合で master ブランチ専用の job, それ以外の job を定義し呼び出す方法をとっています。s3_sync 前提だと生成したファイルの取り回しが面倒になるためです。\nCircleCI 2.0 に移行してどうか メリット 3 分かかっていた処理が 1 分に短縮 1.0 の時は circle.yml で頑張る必要があったが Docker イメージの環境を中心に考えればいい デメリット 自分で Docker イメージを作るのは慣れが必要 全体的には移行するだけのメリットはありました。簡単なものであれば Docker イメージを自作する必要はないので設定方法が理解できれば CircleCI 1.0 と大差ない気がします。\n","permalink":"https://issueoverflow.com/2018/05/04/deploy-a-site-created-with-middleman-on-s3--cloudfront-using-circleci-2.0/","summary":"\u003cp\u003e自分の会社のサイトは創立以来 Middleman で管理運用しています。これまでは CircleCI 1.0 の機能を利用して AWS S3 にデプロイし CloudFront のキャッシュをクリアする構成になっていました。\u003c/p\u003e\n\u003cp\u003eCircleCI 1.0 が 2018 年 8 月末日で利用できなくなるため 2.0 に変更する必要がありました。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://circleci.com/blog/sunsetting-1-0/\"\u003eCircleCI 1.0 End of Life on August 31, 2018\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"circleci-20-対応にやったこと\"\u003eCircleCI 2.0 対応にやったこと\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eCircleCI 2.0 のドキュメントの確認\u003c/li\u003e\n\u003cli\u003eMiddleman がビルドできる Docker イメージ作成\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecircle.yml\u003c/code\u003e を \u003ccode\u003e.circleci/config.yml\u003c/code\u003e に変更\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eCircleCI 2.0 を利用するには Docker イメージが必要です。CircleCI が用意しているイメージを利用する方法もあります。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://circleci.com/docs/2.0/circleci-images/\"\u003ePre-Built CircleCI Docker Images - CircleCI\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e今回は Docker の学習も兼ねて自分で Docker イメージを用意することにしました。\u003c/p\u003e\n\u003ch2 id=\"docker-イメージの作り方\"\u003eDocker イメージの作り方\u003c/h2\u003e\n\u003cp\u003eできたもの:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDocker Hub: \u003ca href=\"https://hub.docker.com/r/yuya-matsushima/middleman/\"\u003eyuya-matsushima/middleman\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGitHub\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yuya-matsushima/docker-middleman\"\u003eyuya-matsushima/docker-middleman\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e依存イメージ: \u003ca href=\"https://github.com/yuya-matsushima/docker-ruby\"\u003eyuya-matsushima/docker-ruby\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e今回は Ubuntu 16.04 をベースに Ruby, NodeJS + Yarn が動作するイメージを作成しました。自分でイメージを作成する場合は必須となるパッケージがあるので注意が必要です。Ubuntu 16.04 の場合は例えば ca-certificates は必須です。\u003c/p\u003e","title":"CircleCI 2.0 を使って Middleman で作ったサイトを AWS S3 + CloudFront にデプロイ"},{"content":"サイト内検索サービス LazySearch の課題のとして使い始めるまでに JS で処理を書く必要があり煩雑という問題があります。サイト登録まで到達した後に, さらに JSON/JSONP で Search API に問い合わせる処理を JS で書かなければなりませんでした。\nJS で処理を書く, といっても検索結果のデザインやページネーションまで含めればサクッと書けるものでもありません。\nそこで JSライブラリを置けばサイト内検索機能が使える を目標に JS ライブラリ lz.js を開発しています。\nリポジトリ: https://github.com/fillin-inc/lazysearch-js\n目標仕様 モダンブラウザ + Edge + IE10-11 をサポート JS ライブラリを配置し, form タグの hidden に指定されたパラメータを指定する 検索結果はモーダル表示 PC, タブレット, スマホでそれぞれレスポンシブに対応 開発環境 webpack + Babel css-loader + style-loader を使った CSS ロード html-loader を使った HTML テンプレートの読み込み Pure JS をベースに必要最低限のライブラリで実装 なぜ ES2015 で作ってみてどうだったか 世代的に JS を始めた頃には便利な jQuery がすでにありました。しかし, ES2015 ではより表現しやすい構文が用意され, モダンブラウザではブラウザ間の差異を(そこまで)気にする必要がなかったので苦労はありませんでした。\nIE10, 11 で時々使えないメソッドがあったので相変わらず\u0026hellip; という気持ちにはなりました。\nどちらかというと JS よりも HTML/CSS のマークアップで苦労しました。最近サボったりフリーランスの方にお願いしているのですっかり鈍っていました。\nできたもの このサイトにも lz.js を使ったサイト内検索機能を追加しています。↑の検索窓から動作を確認できます。作ってみて 「Hugo で作った静的サイトに LazySearch を使って5分でサイト内検索を追加する方法」 みたいなタイトルをこの記事に付けたくなるくらい便利でした。\nやっていることは難しくありませんが, 単なる API とは異なり目の前で確認できる動作をするためデモをする際にも良い評価をいただけるようになりました。\nこれから とりあえずまともに動く, レベルなのでもう少し処理の最適化やテストの追加など作業を進めていきたいと思います。高崎で webpack + babel, Go, Ruby on Rails で開発を可能な人をひっそり探しています\u0026hellip;\n","permalink":"https://issueoverflow.com/2018/04/08/created-a-site-search-library-with-es2015/","summary":"\u003cp\u003eサイト内検索サービス \u003ca href=\"https://lazysear.ch/\"\u003eLazySearch\u003c/a\u003e の課題のとして使い始めるまでに JS で処理を書く必要があり煩雑という問題があります。サイト登録まで到達した後に, さらに JSON/JSONP で Search API に問い合わせる処理を JS で書かなければなりませんでした。\u003c/p\u003e\n\u003cp\u003eJS で処理を書く, といっても検索結果のデザインやページネーションまで含めればサクッと書けるものでもありません。\u003c/p\u003e\n\u003cp\u003eそこで \u003cstrong\u003eJSライブラリを置けばサイト内検索機能が使える\u003c/strong\u003e を目標に JS ライブラリ \u003ccode\u003elz.js\u003c/code\u003e を開発しています。\u003c/p\u003e\n\u003cp\u003eリポジトリ: \u003ca href=\"https://github.com/fillin-inc/lazysearch-js\"\u003ehttps://github.com/fillin-inc/lazysearch-js\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"目標仕様\"\u003e目標仕様\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eモダンブラウザ + Edge + IE10-11 をサポート\u003c/li\u003e\n\u003cli\u003eJS ライブラリを配置し, form タグの hidden に指定されたパラメータを指定する\u003c/li\u003e\n\u003cli\u003e検索結果はモーダル表示\u003c/li\u003e\n\u003cli\u003ePC, タブレット, スマホでそれぞれレスポンシブに対応\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"開発環境\"\u003e開発環境\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://webpack.js.org/\"\u003ewebpack\u003c/a\u003e + \u003ca href=\"https://babeljs.io/\"\u003eBabel\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/webpack-contrib/css-loader\"\u003ecss-loader\u003c/a\u003e + \u003ca href=\"https://github.com/webpack-contrib/style-loader\"\u003estyle-loader\u003c/a\u003e を使った CSS ロード\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/webpack-contrib/html-loader\"\u003ehtml-loader\u003c/a\u003e を使った HTML テンプレートの読み込み\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePure JS をベースに必要最低限のライブラリで実装\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"なぜ-es2015-で作ってみてどうだったか\"\u003eなぜ ES2015 で作ってみてどうだったか\u003c/h2\u003e\n\u003cp\u003e世代的に JS を始めた頃には便利な jQuery がすでにありました。しかし, ES2015 ではより表現しやすい構文が用意され, モダンブラウザではブラウザ間の差異を(そこまで)気にする必要がなかったので苦労はありませんでした。\u003c/p\u003e\n\u003cp\u003eIE10, 11 で時々使えないメソッドがあったので相変わらず\u0026hellip; という気持ちにはなりました。\u003c/p\u003e","title":"ES2015 で LazySearch のサイト内検索ライブラリを開発した"},{"content":" この記事を書くにあたり手元の Mac Book Air の年代を調べたら 2013 年で流石に古くて驚きました。 タイトルのとおり Mac Book Air のバッテリー交換をしたので書いておきます。早く買い換えたい。早く 32GB の MacBook Pro が出てほしい。\nなぜ交換したか? 電池の寿命です。これまで 1 度も交換せずに使ってきたので仕方ないですね。\n本来であれば買い換えを検討したいところなのですが, このタイミングで新しい MacBook Pro を買うのは悔しいので電池を交換してお茶を濁す計画です。お仕事的には Mac Book Air は打ち合わせや簡単な資料作成程度に利用するだけなので問題ありませんでした。\nバッテリーの調達 適当にググって Mac Book Air の型番を調べ, amazon でサッと購入しました。\nいくつか購入候補はありましたが, レビューを見ると純正でない場合新品同様に長時間モバイル駆動は難しいらしいです。2-3 時間とりあえず動いてくれれば問題ないのでそれなりのお値段の商品を選択しました。\n純正を買って長時間駆動しないよりは…\nというわけで次のバッテリーを購入しました。\nAmazon | A1495バッテリー Apple アップルMacBook Air 11インチ A1465 対応 2013 2014 | | バッテリー 通販\n商品説明にはありませんが, 交換に必要な特殊ドライバー2 本が付属しています。なので私のように特殊ドライバーセットのようなものを手配する必要はありません…(書いておいて欲しかった)\nバッテリーの交換 裏蓋を開けてネジを外して取り付けてネジで止めるだけですね。一応交換前にバックアップは取っておきましょう。\n交換したバッテリーの処分 何かと処分に困るリチウムイオンバッテリーですが JBRS のサイトから最寄りの処分可能なお店が探せました。\n[リサイクル協力店]検索 |小型充電式電池リサイクルの一般社団法人JBRC\n会社が近い高崎駅前のヤマダ電機さんに持ち込んで回収していただきました。なお, 回収 BOX はないので店員さんを捕まえて相談しましょう。無償で引き取っていただけて助かりました。\n","permalink":"https://issueoverflow.com/2018/02/27/replacing-the-battery-of-mac-book-air-11-inch-mid-2013/","summary":"\u003cpicture\u003e\n            \u003csource\n                srcset=\"/2018/02/27/replacing-the-battery-of-mac-book-air-11-inch-mid-2013/mac-book-air-11inch-2013_hu_c139ad221b03ece8.webp 480w, /2018/02/27/replacing-the-battery-of-mac-book-air-11-inch-mid-2013/mac-book-air-11inch-2013_hu_4937c7cb7a0f229c.webp 750w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\n                type=\"image/webp\"\u003e\n            \u003cimg\n                src=\"/2018/02/27/replacing-the-battery-of-mac-book-air-11-inch-mid-2013/mac-book-air-11inch-2013.png\"\n                alt=\"mac book air 11 インチ(2013 Mid) 画像\"\n                width=\"750\"\n                height=\"336\"\n                loading=\"lazy\"\n                decoding=\"async\"\n                srcset=\"/2018/02/27/replacing-the-battery-of-mac-book-air-11-inch-mid-2013/mac-book-air-11inch-2013_hu_646d2953998e91bf.png 480w, /2018/02/27/replacing-the-battery-of-mac-book-air-11-inch-mid-2013/mac-book-air-11inch-2013.png 750w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\u003e\n        \u003c/picture\u003e\n\u003cp\u003eこの記事を書くにあたり手元の Mac Book Air の年代を調べたら 2013 年で流石に古くて驚きました。\nタイトルのとおり Mac Book Air のバッテリー交換をしたので書いておきます。早く買い換えたい。早く 32GB の MacBook Pro が出てほしい。\u003c/p\u003e\n\u003ch2 id=\"なぜ交換したか\"\u003eなぜ交換したか?\u003c/h2\u003e\n\u003cp\u003e電池の寿命です。これまで 1 度も交換せずに使ってきたので仕方ないですね。\u003c/p\u003e\n\u003cp\u003e本来であれば買い換えを検討したいところなのですが, このタイミングで新しい MacBook Pro を買うのは悔しいので電池を交換してお茶を濁す計画です。お仕事的には Mac Book Air は打ち合わせや簡単な資料作成程度に利用するだけなので問題ありませんでした。\u003c/p\u003e\n\u003ch2 id=\"バッテリーの調達\"\u003eバッテリーの調達\u003c/h2\u003e\n\u003cp\u003e適当にググって Mac Book Air の型番を調べ, amazon でサッと購入しました。\u003c/p\u003e\n\u003cp\u003eいくつか購入候補はありましたが, レビューを見ると純正でない場合新品同様に長時間モバイル駆動は難しいらしいです。2-3 時間とりあえず動いてくれれば問題ないのでそれなりのお値段の商品を選択しました。\u003c/p\u003e\n\u003cp\u003e純正を買って長時間駆動しないよりは…\u003c/p\u003e\n\u003cp\u003eというわけで次のバッテリーを購入しました。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.amazon.co.jp/dp/B01DFCWNI6\"\u003eAmazon | A1495バッテリー Apple アップルMacBook Air 11インチ A1465 対応 2013 2014 | | バッテリー 通販\u003c/a\u003e\u003c/p\u003e","title":"Mac Book Air 11インチ(Mid 2013) の電池を交換した"},{"content":"引っ越すことになったので法人登記を含む「代表者住所変更」の一連の手続きを行う必要が発生しました。登記変更が必要だということは把握していましたが, 実際にやってみたら他にも手続きが必要で大変でした。\n忘れないうちにまとめておきたいと思います。\n何が変更されたか 株式会社の代表(私)の居住する住所が変更になりました。この時点で会社の状況を含むステータスは次のとおりです。\n会社 群馬県高崎市に存在 保険証は協会けんぽ 自分 高崎市内から高崎市内への転居 必要な手続き 法務局で法人の代表者住所変更登記 (参考) https://houmukyoku.moj.go.jp/homu/content/001249319.pdf 登録免許税: 10,000 円 (会社規模によるので注意) 登記申請から変更反映まで通常 1 週間弱 税務署に異動届提出 (参考) https://www.nta.go.jp/tetsuzuki/shinsei/annai/hojin/annai/1554_5.htm 書類提出のみ 添付書類に住所変更が反映された登記簿謄本(履歴事項全部証明書を提出した)が必要 年金事務所に書類提出 事業所関係変更届 (参考) https://www.nenkin.go.jp/service/kounen/tekiyo/jigyosho/20140815.html 被保険者住所変更届 (参考) https://www.nenkin.go.jp/service/kounen/tekiyo/hihokensha2/20150320.html 「控え」が取得可能なものは同様の書類を 2 部用意し, 控え分をファイル保管しています。\nネット情報との差異 県税事務所や法人がある市区町村への異動届についても「提出が必要」と書かれていることがありますが, 代表者住所変更については, 都道府県/市区町村で異なるようなので問い合わせるか各所の Q\u0026amp;A で確認する必要がありました。\n場合によっては上記に加えて +2 種類の書類が発生することがあるということですね\u0026hellip;\n手続きを終えた感想 法人番号各場所はあっても勝手によしなにやってくれなくて不便 せめて法務局で登記変更が終わった段階で税務署, 年金事務所ともに勝手に修正してほしい 法人番号とは一体なんなのか\u0026hellip;? (行政内で効率化している予感はします)\n参考: 法人番号とは｜国税庁法人番号公表サイト\n","permalink":"https://issueoverflow.com/2018/02/26/procedure-for-change-of-companys-representative-address/","summary":"\u003cp\u003e引っ越すことになったので法人登記を含む「代表者住所変更」の一連の手続きを行う必要が発生しました。登記変更が必要だということは把握していましたが, 実際にやってみたら他にも手続きが必要で大変でした。\u003c/p\u003e\n\u003cp\u003e忘れないうちにまとめておきたいと思います。\u003c/p\u003e\n\u003ch2 id=\"何が変更されたか\"\u003e何が変更されたか\u003c/h2\u003e\n\u003cp\u003e株式会社の代表(私)の居住する住所が変更になりました。この時点で会社の状況を含むステータスは次のとおりです。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e会社\n\u003cul\u003e\n\u003cli\u003e群馬県高崎市に存在\u003c/li\u003e\n\u003cli\u003e保険証は協会けんぽ\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e自分\n\u003cul\u003e\n\u003cli\u003e高崎市内から高崎市内への転居\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"必要な手続き\"\u003e必要な手続き\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e法務局で法人の代表者住所変更登記\n\u003cul\u003e\n\u003cli\u003e(参考) \u003ca href=\"https://houmukyoku.moj.go.jp/homu/content/001249319.pdf\"\u003ehttps://houmukyoku.moj.go.jp/homu/content/001249319.pdf\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e登録免許税: 10,000 円 (会社規模によるので注意)\u003c/li\u003e\n\u003cli\u003e登記申請から変更反映まで通常 1 週間弱\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e税務署に異動届提出\n\u003cul\u003e\n\u003cli\u003e(参考) \u003ca href=\"https://www.nta.go.jp/tetsuzuki/shinsei/annai/hojin/annai/1554_5.htm\"\u003ehttps://www.nta.go.jp/tetsuzuki/shinsei/annai/hojin/annai/1554_5.htm\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e書類提出のみ\u003c/li\u003e\n\u003cli\u003e添付書類に住所変更が反映された登記簿謄本(履歴事項全部証明書を提出した)が必要\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e年金事務所に書類提出\n\u003cul\u003e\n\u003cli\u003e事業所関係変更届\n\u003cul\u003e\n\u003cli\u003e(参考) \u003ca href=\"https://www.nenkin.go.jp/service/kounen/tekiyo/jigyosho/20140815.html\"\u003ehttps://www.nenkin.go.jp/service/kounen/tekiyo/jigyosho/20140815.html\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e被保険者住所変更届\n\u003cul\u003e\n\u003cli\u003e(参考) \u003ca href=\"https://www.nenkin.go.jp/service/kounen/tekiyo/hihokensha2/20150320.html\"\u003ehttps://www.nenkin.go.jp/service/kounen/tekiyo/hihokensha2/20150320.html\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e「控え」が取得可能なものは同様の書類を 2 部用意し, 控え分をファイル保管しています。\u003c/p\u003e\n\u003ch2 id=\"ネット情報との差異\"\u003eネット情報との差異\u003c/h2\u003e\n\u003cp\u003e県税事務所や法人がある市区町村への異動届についても「提出が必要」と書かれていることがありますが, 代表者住所変更については, 都道府県/市区町村で異なるようなので問い合わせるか各所の Q\u0026amp;A で確認する必要がありました。\u003c/p\u003e\n\u003cp\u003e場合によっては上記に加えて +2 種類の書類が発生することがあるということですね\u0026hellip;\u003c/p\u003e\n\u003ch2 id=\"手続きを終えた感想\"\u003e手続きを終えた感想\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e法人番号各場所はあっても勝手によしなにやってくれなくて不便\u003c/li\u003e\n\u003cli\u003eせめて法務局で登記変更が終わった段階で税務署, 年金事務所ともに勝手に修正してほしい\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e法人番号とは一体なんなのか\u0026hellip;? (行政内で効率化している予感はします)\u003c/p\u003e\n\u003cp\u003e参考: \u003ca href=\"https://www.houjin-bangou.nta.go.jp/setsumei/\"\u003e法人番号とは｜国税庁法人番号公表サイト\u003c/a\u003e\u003c/p\u003e","title":"会社の代表者住所変更手続きをした"},{"content":"特定のプロジェクトであったり特定のカテゴリの調査の場合, 対応するディレクトリを用意しておいて日付ファイル名の markdown でメモを取ることが多いです。 例えば ~/path/to/dir/2018-01-10.md のようなファイル名になります。\nこの時 Markdown の 1 行目, つまり見出しも日付にしています。\n# 2018-01-10 都度日付を思い出すのは面倒なので .zshrc に関数を定義して簡単に呼び出されるようにしています。\n.zshrc に追加するコード function todaymd() { filename=`date \u0026#34;+%Y%m%d.md\u0026#34;` if [ ! -f $filename ];then date \u0026#34;+# %Y-%m-%d\u0026#34; \u0026gt; $filename fi vi $filename } 使い方 次のコマンドを実行することで markdown ファイルを vim で開きます。\n$ todaymd vim で開いた時点で見出し(#) に日付が記述されるようになっています。例えば今日の $ todaymd を実行すると次のように。\n# 2018-01-10 地味だけど便利。\n","permalink":"https://issueoverflow.com/2018/01/10/open-markdown-with-todays-date-filename-in-zsh/","summary":"\u003cp\u003e特定のプロジェクトであったり特定のカテゴリの調査の場合, 対応するディレクトリを用意しておいて日付ファイル名の markdown でメモを取ることが多いです。\n例えば \u003ccode\u003e~/path/to/dir/2018-01-10.md\u003c/code\u003e のようなファイル名になります。\u003c/p\u003e\n\u003cp\u003eこの時 Markdown の 1 行目, つまり見出しも日付にしています。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# 2018-01-10\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e都度日付を思い出すのは面倒なので \u003ccode\u003e.zshrc\u003c/code\u003e に関数を定義して簡単に呼び出されるようにしています。\u003c/p\u003e\n\u003ch2 id=\"zshrc-に追加するコード\"\u003e\u003ccode\u003e.zshrc\u003c/code\u003e に追加するコード\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003efunction\u003c/span\u003e todaymd\u003cspan style=\"color:#f92672\"\u003e()\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    filename\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e`\u003c/span\u003edate \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;+%Y%m%d.md\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e ! -f $filename \u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e;\u003cspan style=\"color:#66d9ef\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      date \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;+# %Y-%m-%d\u0026#34;\u003c/span\u003e \u0026gt; $filename\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    vi $filename\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003cp\u003e次のコマンドを実行することで markdown ファイルを vim で開きます。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ todaymd\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003evim で開いた時点で見出し(#) に日付が記述されるようになっています。例えば今日の \u003ccode\u003e$ todaymd\u003c/code\u003e を実行すると次のように。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e# 2018-01-10\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e地味だけど便利。\u003c/p\u003e","title":"zshで今日の日付ファイル名でmarkdownを開く"},{"content":" ドキュメント\n改善したところ 適当に, とりあえず, それっぽく作っていたドキュメントを書き直した ページ構成の変更 紛らわしい複雑な説明を排除 簡単な機能部分についてのみ説明 ページ間リンクを整備した できていないページは「できてない」で現状はいいか, という対応 アニメーション gif の撮影方法 どういった方法がスタンダードなのか分からなかったので, 適当にググって App Store で見つけた GIPHY を使って撮影してみました。\nアニメーション gif で実行されている検索処理は LazySearch が使われています。\n開発状況 LazySearch は 5 月にひっそりとリリースされてから着実に機能を増やしながら改善を続けています。\n特に外部からの資金等はなく人員も用意できていないため, 私が 1 人で受託開発や SES の合間に作業を進めています。Ruby on Rails + Golang を組み合せてサービスを構成している都合上, 群馬では人材が確保しづらい事情もあります。\nまだドキュメントを含めたユーザーサポート体制が十分にとれておらず, なかなか実利用に結びつかない状態です。そんな中でも積極的にご利用いただいている方もいらっしゃり大変感謝しています。\n年内に当初考えていた基本機能の実装目処がつく予定です。年明け, 遅くとも 2 月中には課金機能を含めて正式リリースできる予定です。\n最後に まずロゴを発注するところから\u0026hellip;\n","permalink":"https://issueoverflow.com/2017/12/11/improved-the-document-of-lazysearch/","summary":"\u003cimg\n            src=\"/2017/12/11/improved-the-document-of-lazysearch/doc_animation.gif\"\n            alt=\"LazySearch ドキュメントサイトの検索の様子\"\n            \n            loading=\"lazy\"\n            decoding=\"async\"\u003e\n\u003cp\u003e\u003ca href=\"https://docs.lazysear.ch\"\u003eドキュメント\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"改善したところ\"\u003e改善したところ\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e適当に, とりあえず, それっぽく作っていたドキュメントを書き直した\n\u003cul\u003e\n\u003cli\u003eページ構成の変更\u003c/li\u003e\n\u003cli\u003e紛らわしい複雑な説明を排除\u003c/li\u003e\n\u003cli\u003e簡単な機能部分についてのみ説明\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eページ間リンクを整備した\u003c/li\u003e\n\u003cli\u003eできていないページは「できてない」で現状はいいか, という対応\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"アニメーション-gif-の撮影方法\"\u003eアニメーション gif の撮影方法\u003c/h2\u003e\n\u003cp\u003eどういった方法がスタンダードなのか分からなかったので, 適当にググって App Store で見つけた \u003ca href=\"https://itunes.apple.com/us/app/giphy-capture-the-gif-maker/id668208984\"\u003eGIPHY\u003c/a\u003e を使って撮影してみました。\u003c/p\u003e\n\u003cp\u003eアニメーション gif で実行されている検索処理は \u003ca href=\"https://lazysear.ch\"\u003eLazySearch\u003c/a\u003e が使われています。\u003c/p\u003e\n\u003ch2 id=\"開発状況\"\u003e開発状況\u003c/h2\u003e\n\u003cp\u003eLazySearch は 5 月にひっそりとリリースされてから着実に機能を増やしながら改善を続けています。\u003c/p\u003e\n\u003cp\u003e特に外部からの資金等はなく人員も用意できていないため, 私が 1 人で受託開発や SES の合間に作業を進めています。Ruby on Rails + Golang を組み合せてサービスを構成している都合上, 群馬では人材が確保しづらい事情もあります。\u003c/p\u003e\n\u003cp\u003eまだドキュメントを含めたユーザーサポート体制が十分にとれておらず, なかなか実利用に結びつかない状態です。そんな中でも積極的にご利用いただいている方もいらっしゃり大変感謝しています。\u003c/p\u003e\n\u003cp\u003e年内に当初考えていた基本機能の実装目処がつく予定です。年明け, 遅くとも 2 月中には課金機能を含めて正式リリースできる予定です。\u003c/p\u003e\n\u003ch2 id=\"最後に\"\u003e最後に\u003c/h2\u003e\n\u003cp\u003eまずロゴを発注するところから\u0026hellip;\u003c/p\u003e","title":"LazySearch のドキュメントを改善した"},{"content":"弊社は 8 月末決算なので本日が法人税まわりの支払い期日でした。無事に支払いが完了したのでいろいろとまとめておこう, という記事です。\nどんな仕事を結局しているのか 大きくは 2 つに分かれます。\n自社サービスの開発 他社様への技術提供や協力 自社サービスはあまり開発の進捗も芳しくないのが実態です。\u0026hellip;あまり個人事業していた時と変わっていないとも言えます。ただし, 法人があるからこそのご相談やお問い合わせもあるので法人化自体は「正直しんどいけど作った分の価値はあったかな？」という塩梅です。\n2 期目はどうするのか お金を稼ぐ 自社サービスをどうにかする 人材は今のタイミングでは難しい, というのが正直なところです。来年の 8 月末で入居しているシェアオフィスから撤退しなければいけないので, そのタイミングで検討することになると思います。\n人を雇用するっていうのは, 日本の法律ベースでは相当難しいので悩ましいところです。\n1 期目の感想 前半厳しかったが, 後半で 2 期目以降の見通しがついてきたので助かった 1 人で会社はきついので 2 人以上でやりましょう どうなることかと思ったこともありましたが今日も元気にやっています ","permalink":"https://issueoverflow.com/2017/10/31/after-the-first-term-of-the-company-is-over/","summary":"\u003cp\u003e弊社は 8 月末決算なので本日が法人税まわりの支払い期日でした。無事に支払いが完了したのでいろいろとまとめておこう, という記事です。\u003c/p\u003e\n\u003ch2 id=\"どんな仕事を結局しているのか\"\u003eどんな仕事を結局しているのか\u003c/h2\u003e\n\u003cp\u003e大きくは 2 つに分かれます。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e自社サービスの開発\u003c/li\u003e\n\u003cli\u003e他社様への技術提供や協力\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e自社サービスはあまり開発の進捗も芳しくないのが実態です。\u0026hellip;あまり個人事業していた時と変わっていないとも言えます。ただし, 法人があるからこそのご相談やお問い合わせもあるので法人化自体は「正直しんどいけど作った分の価値はあったかな？」という塩梅です。\u003c/p\u003e\n\u003ch2 id=\"2-期目はどうするのか\"\u003e2 期目はどうするのか\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eお金を稼ぐ\u003c/li\u003e\n\u003cli\u003e自社サービスをどうにかする\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e人材は今のタイミングでは難しい, というのが正直なところです。来年の 8 月末で入居しているシェアオフィスから撤退しなければいけないので, そのタイミングで検討することになると思います。\u003c/p\u003e\n\u003cp\u003e人を雇用するっていうのは, 日本の法律ベースでは相当難しいので悩ましいところです。\u003c/p\u003e\n\u003ch2 id=\"1-期目の感想\"\u003e1 期目の感想\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e前半厳しかったが, 後半で 2 期目以降の見通しがついてきたので助かった\u003c/li\u003e\n\u003cli\u003e1 人で会社はきついので 2 人以上でやりましょう\u003c/li\u003e\n\u003cli\u003eどうなることかと思ったこともありましたが今日も元気にやっています\u003c/li\u003e\n\u003c/ul\u003e","title":"会社の 1 期目が終わって"},{"content":" JINS 高崎モントレー店(高崎駅内) で購入しました。\n以前使っていたビジネス用眼鏡は経年劣化でツルが折れてしまいました。予備用のプライベート眼鏡で我慢していましたが交渉事が多くなりそうな気配があるので改めてキリッと見える眼鏡を購入しました。\n私にとって眼鏡は顔の一部で大事なものですが, 大事に扱う習慣がないので長くて 2 年程度で壊れてしまいます。消耗品ですね。\n","permalink":"https://issueoverflow.com/2017/10/06/new-glass/","summary":"\u003cpicture\u003e\n            \u003csource\n                srcset=\"/2017/10/06/new-glass/glass_hu_3da3929c36eb6021.webp 480w, /2017/10/06/new-glass/glass_hu_a519e8cc482b70c7.webp 800w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\n                type=\"image/webp\"\u003e\n            \u003cimg\n                src=\"/2017/10/06/new-glass/glass.jpg\"\n                alt=\"新しい眼鏡\"\n                width=\"800\"\n                height=\"600\"\n                loading=\"lazy\"\n                decoding=\"async\"\n                srcset=\"/2017/10/06/new-glass/glass_hu_b081bba29b733bbe.jpg 480w, /2017/10/06/new-glass/glass.jpg 800w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\u003e\n        \u003c/picture\u003e\n\u003cp\u003eJINS 高崎モントレー店(高崎駅内) で購入しました。\u003c/p\u003e\n\u003cp\u003e以前使っていたビジネス用眼鏡は経年劣化でツルが折れてしまいました。予備用のプライベート眼鏡で我慢していましたが交渉事が多くなりそうな気配があるので改めてキリッと見える眼鏡を購入しました。\u003c/p\u003e\n\u003cp\u003e私にとって眼鏡は顔の一部で大事なものですが, 大事に扱う習慣がないので長くて 2 年程度で壊れてしまいます。消耗品ですね。\u003c/p\u003e","title":"新しい眼鏡を購入しました"},{"content":"「エラーが起こっても継続的に取り組めること」の言い換えでしかありませんが, その時グッと我慢してコードを書けることがプログラマとして成長できるタイプの人材ではないか? ということをよく考えています。\n","permalink":"https://issueoverflow.com/2017/09/23/keep-sitting-and-writing-code/","summary":"\u003cp\u003e「エラーが起こっても継続的に取り組めること」の言い換えでしかありませんが, その時グッと我慢してコードを書けることがプログラマとして成長できるタイプの人材ではないか? ということをよく考えています。\u003c/p\u003e","title":"座ってコードを書き続けること"},{"content":"会社の Web サイト の内容を少し見直し, ついでに諸々調整をしました。具体的には事業内容を整理, 子ページができたのでデザインの一部修正等々です。\n見直し完了後に PageSpeed Insights の指摘事項を修正する過程で Cache-Control ヘッダを付与する必要がでてきました。そのあたりの話です。\nPageSpeed Insights の指摘事項 このブログでも同様の問題が指摘されています。アセット類のファイルに対して \u0026ldquo;キャッシュの設定が行われていない\u0026rdquo; ために発生する問題でした。\nmiddleman-s3_sync を使って Cache-Control ヘッダを設定する方法 会社 Web サイトは AWS S3 + CloudFront 環境で運用されています。S3 の管理画面に入って個別または一括でヘッダ情報を追加することができます。ただし, 管理画面からの設定を行う場合, Middleman でサイトを更新する度に管理画面から設定を変更する必要があります。これは流石に不便です。\nそこで middleman-s3_sync から Cache-Control ヘッダを設定する方法をとります。\n具体的には config.rb に対して次の設定を追加します。\n# middleman-s3_sync の設定 activate :s3_sync do |s3| s3.region = \u0026#39;ap-northeast-1\u0026#39; s3.index_document = \u0026#39;index.html\u0026#39; s3.error_document = \u0026#39;404/index.html\u0026#39; end default_caching_policy max_age: (60 * 60 * 24 * 365), public: true, must_revalidate: true caching_policy \u0026#39;text/html\u0026#39;, max_age: 60 * 10, public: true, must_revalidate: true caching_policy \u0026#39;text/plain\u0026#39;, max_age: 60 * 10, public: true, must_revalidate: true caching_policy \u0026#39;application/xml\u0026#39;, max_age: 60 * 10, public: true, must_revalidate: true default_caching_policy ですべてのファイルに対して cache の設定を行い, html, txt, xml の場合のみ max_age を変更するように設定しています。\n設定状況を S3 の管理画面から確認してみます。まず index.html (トップページ) の場合:\nmax_age が 600 秒(10 分) に設定されていることが確認できました。\n続いて, logo.svg の設定状況です:\nmax_age が 31536000 秒(1 年) に設定されていることが確認できました。\n1 年の cache は問題にならないのか 例えば CSS を一部書き直した様な場合に 1 年の cache が設定されている場合反映されないかも\u0026hellip; という心配が出てきそうですが, Middleman の asset_hash を利用すれば CSS, JS, 画像類については問題にならないです。\nもちろんアセットではないファイルを追加する場合は cache 設定を見直す必要があります。\n最後に Cache-Control の設定については, Middleman ではない環境の場合でも対応する方法はあります。Middleman を中心としたエコシステムの中では比較的に簡単にできるので便利だなぁ〜と改めて思いました。\nhugo の場合: HowTo: Deploying Hugo on S3 and Cloudfront - tips \u0026amp; tricks - Hugo Discussion\n","permalink":"https://issueoverflow.com/2017/08/19/set-cache-control-header-with-middleman-s3_sync/","summary":"\u003cp\u003e会社の \u003ca href=\"https://www.fillin-inc.com\"\u003eWeb サイト\u003c/a\u003e の内容を少し見直し, ついでに諸々調整をしました。具体的には事業内容を整理, 子ページができたのでデザインの一部修正等々です。\u003c/p\u003e\n\u003cp\u003e見直し完了後に \u003ca href=\"https://developers.google.com/speed/pagespeed/insights/?hl=ja\"\u003ePageSpeed Insights\u003c/a\u003e の指摘事項を修正する過程で \u003ccode\u003eCache-Control\u003c/code\u003e ヘッダを付与する必要がでてきました。そのあたりの話です。\u003c/p\u003e\n\u003ch2 id=\"pagespeed-insights-の指摘事項\"\u003ePageSpeed Insights の指摘事項\u003c/h2\u003e\n\u003cp\u003eこのブログでも同様の問題が指摘されています。アセット類のファイルに対して \u0026ldquo;キャッシュの設定が行われていない\u0026rdquo; ために発生する問題でした。\u003c/p\u003e\n\u003cpicture\u003e\n            \u003csource\n                srcset=\"/2017/08/19/set-cache-control-header-with-middleman-s3_sync/cache-control-empty_hu_95f651f98df8e88d.webp 480w, /2017/08/19/set-cache-control-header-with-middleman-s3_sync/cache-control-empty_hu_70958140d541577b.webp 800w, /2017/08/19/set-cache-control-header-with-middleman-s3_sync/cache-control-empty_hu_c41eec973ab2ceb8.webp 1049w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\n                type=\"image/webp\"\u003e\n            \u003cimg\n                src=\"/2017/08/19/set-cache-control-header-with-middleman-s3_sync/cache-control-empty.png\"\n                alt=\"Cache-Control が存在しないために発生した警告\"\n                width=\"1049\"\n                height=\"430\"\n                loading=\"lazy\"\n                decoding=\"async\"\n                srcset=\"/2017/08/19/set-cache-control-header-with-middleman-s3_sync/cache-control-empty_hu_b3aedf176b07aada.png 480w, /2017/08/19/set-cache-control-header-with-middleman-s3_sync/cache-control-empty_hu_8e601924def161e.png 800w, /2017/08/19/set-cache-control-header-with-middleman-s3_sync/cache-control-empty.png 1049w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\u003e\n        \u003c/picture\u003e\n\u003ch2 id=\"middleman-s3_sync-を使って-cache-control-ヘッダを設定する方法\"\u003emiddleman-s3_sync を使って Cache-Control ヘッダを設定する方法\u003c/h2\u003e\n\u003cp\u003e会社 Web サイトは AWS S3 + CloudFront 環境で運用されています。S3 の管理画面に入って個別または一括でヘッダ情報を追加することができます。ただし, 管理画面からの設定を行う場合, Middleman でサイトを更新する度に管理画面から設定を変更する必要があります。これは流石に不便です。\u003c/p\u003e\n\u003cp\u003eそこで middleman-s3_sync から \u003ccode\u003eCache-Control\u003c/code\u003e ヘッダを設定する方法をとります。\u003c/p\u003e\n\u003cp\u003e具体的には \u003ccode\u003econfig.rb\u003c/code\u003e に対して次の設定を追加します。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-ruby\" data-lang=\"ruby\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# middleman-s3_sync の設定\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eactivate \u003cspan style=\"color:#e6db74\"\u003e:s3_sync\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003edo\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003es3\u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  s3\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eregion \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;ap-northeast-1\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  s3\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eindex_document \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;index.html\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  s3\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eerror_document \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;404/index.html\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eend\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003edefault_caching_policy \u003cspan style=\"color:#e6db74\"\u003emax_age\u003c/span\u003e: (\u003cspan style=\"color:#ae81ff\"\u003e60\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e60\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e24\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e365\u003c/span\u003e), \u003cspan style=\"color:#66d9ef\"\u003epublic\u003c/span\u003e: \u003cspan style=\"color:#66d9ef\"\u003etrue\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003emust_revalidate\u003c/span\u003e: \u003cspan style=\"color:#66d9ef\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ecaching_policy \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;text/html\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003emax_age\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e60\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e10\u003c/span\u003e, \u003cspan style=\"color:#66d9ef\"\u003epublic\u003c/span\u003e: \u003cspan style=\"color:#66d9ef\"\u003etrue\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003emust_revalidate\u003c/span\u003e: \u003cspan style=\"color:#66d9ef\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ecaching_policy \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;text/plain\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003emax_age\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e60\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e10\u003c/span\u003e, \u003cspan style=\"color:#66d9ef\"\u003epublic\u003c/span\u003e: \u003cspan style=\"color:#66d9ef\"\u003etrue\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003emust_revalidate\u003c/span\u003e: \u003cspan style=\"color:#66d9ef\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ecaching_policy \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;application/xml\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003emax_age\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e60\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e10\u003c/span\u003e, \u003cspan style=\"color:#66d9ef\"\u003epublic\u003c/span\u003e: \u003cspan style=\"color:#66d9ef\"\u003etrue\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003emust_revalidate\u003c/span\u003e: \u003cspan style=\"color:#66d9ef\"\u003etrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003ccode\u003edefault_caching_policy\u003c/code\u003e ですべてのファイルに対して cache の設定を行い, html, txt, xml の場合のみ \u003ccode\u003emax_age\u003c/code\u003e を変更するように設定しています。\u003c/p\u003e","title":"middleman-s3_sync で Cache-Control ヘッダを設定する"},{"content":"Ruby で書捨てのコードを書く場合に, とりあえずいつもの感じで RuboCop を実行したい場合の設定を .vimrc に追加しました。\n.vimrc への追加 function! RuboCop() echo system( \u0026#39;RuboCop --config ~/.rubocop.yml \u0026#39; . bufname(\u0026#34;%\u0026#34;)) endfunction 当然のことですが global 環境に RuboCop のインストールと ~/.rubocop.yml の用意が必要です。\nvim 上で実行 vim 上で次のコマンドを実行すると RuboCop が走ります。\n:call RuboCop() 適当にローカルにあったコードで実行してみます。\nとりあえず動きました。\n","permalink":"https://issueoverflow.com/2017/08/05/run-rubocop-on-vim/","summary":"\u003cp\u003eRuby で書捨てのコードを書く場合に, とりあえずいつもの感じで \u003ca href=\"https://github.com/bbatsov/rubocop\"\u003eRuboCop\u003c/a\u003e を実行したい場合の設定を \u003ccode\u003e.vimrc\u003c/code\u003e に追加しました。\u003c/p\u003e\n\u003ch2 id=\"vimrc-への追加\"\u003e.vimrc への追加\u003c/h2\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003efunction! RuboCop()\n  echo system( \u0026#39;RuboCop --config ~/.rubocop.yml \u0026#39; . bufname(\u0026#34;%\u0026#34;))\nendfunction\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e当然のことですが global 環境に RuboCop のインストールと \u003ccode\u003e~/.rubocop.yml\u003c/code\u003e の用意が必要です。\u003c/p\u003e\n\u003ch2 id=\"vim-上で実行\"\u003evim 上で実行\u003c/h2\u003e\n\u003cp\u003evim 上で次のコマンドを実行すると RuboCop が走ります。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e:call RuboCop()\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e適当にローカルにあったコードで実行してみます。\u003c/p\u003e\n\u003cpicture\u003e\n            \u003csource\n                srcset=\"/2017/08/05/run-rubocop-on-vim/result_hu_1eb671f9de99b934.webp 480w, /2017/08/05/run-rubocop-on-vim/result_hu_e973619047f4c3be.webp 600w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\n                type=\"image/webp\"\u003e\n            \u003cimg\n                src=\"/2017/08/05/run-rubocop-on-vim/result.png\"\n                alt=\"call RuboCop() の実行結果\"\n                width=\"600\"\n                height=\"670\"\n                loading=\"lazy\"\n                decoding=\"async\"\n                srcset=\"/2017/08/05/run-rubocop-on-vim/result_hu_51d7effa240bcf15.png 480w, /2017/08/05/run-rubocop-on-vim/result.png 600w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\u003e\n        \u003c/picture\u003e\n\u003cp\u003eとりあえず動きました。\u003c/p\u003e","title":"vim 上で RuboCop を実行する"},{"content":"会社アカウント(Organization): https://github.com/fillin-inc\nなぜ公開するのか こういうことをしている会社で群馬の会社はあまり見当たらないようだから 売上に直結しない, 特に価値があるわけではないが使うものをまとめておきたかった プロダクト/サービスのコードの中に含まれていなくても問題ないものを排除したい気持ちがあった なにを公開したのか Golang のパッケージをとりあえず 2 つ公開しています。LazySearch の中でも使われています。\nhttps://github.com/fillin-inc/timeins time.Time 型の構造体を JSON にするとミリ秒まで表示されてしまう問題へ対応するための型を提供 API の仕様上の問題で採用している https://github.com/fillin-inc/pingpong API の導通確認用ハンドラ アクセスすると \u0026ldquo;Pong\u0026rdquo; が返る 著作者を法人とするか個人とするか fillin-inc の中の人は現状私 1 人なので, 著作者については個人名義でも問題ないのですが次の基準で分けていこうと考えています。\n会社のプロダクト/サービスに積極的に採用されているものは会社 見栄え上プロダクト/サービスの一部と考えられるもの ex. 公開していないが JS のライブラリ, API 用のライブラリとか その他は個人 職務著作の観点からは仕事の時間中に開発したものは法人に帰属しますが, 将来にわたって柔軟に運用できればいいなぁと思っています。\n","permalink":"https://issueoverflow.com/2017/07/29/start-publishing-oss-with-company-account-of-github/","summary":"\u003cp\u003e会社アカウント(Organization): \u003ca href=\"https://github.com/fillin-inc\"\u003ehttps://github.com/fillin-inc\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"なぜ公開するのか\"\u003eなぜ公開するのか\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eこういうことをしている会社で群馬の会社はあまり見当たらないようだから\u003c/li\u003e\n\u003cli\u003e売上に直結しない, 特に価値があるわけではないが使うものをまとめておきたかった\n\u003cul\u003e\n\u003cli\u003eプロダクト/サービスのコードの中に含まれていなくても問題ないものを排除したい気持ちがあった\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"なにを公開したのか\"\u003eなにを公開したのか\u003c/h2\u003e\n\u003cp\u003eGolang のパッケージをとりあえず 2 つ公開しています。\u003ca href=\"https://lazysear.ch\"\u003eLazySearch\u003c/a\u003e の中でも使われています。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fillin-inc/timeins\"\u003ehttps://github.com/fillin-inc/timeins\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003etime.Time\u003c/code\u003e 型の構造体を JSON にするとミリ秒まで表示されてしまう問題へ対応するための型を提供\u003c/li\u003e\n\u003cli\u003eAPI の仕様上の問題で採用している\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fillin-inc/pingpong\"\u003ehttps://github.com/fillin-inc/pingpong\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eAPI の導通確認用ハンドラ\u003c/li\u003e\n\u003cli\u003eアクセスすると \u0026ldquo;Pong\u0026rdquo; が返る\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"著作者を法人とするか個人とするか\"\u003e著作者を法人とするか個人とするか\u003c/h2\u003e\n\u003cp\u003efillin-inc の中の人は現状私 1 人なので, 著作者については個人名義でも問題ないのですが次の基準で分けていこうと考えています。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e会社のプロダクト/サービスに積極的に採用されているものは会社\u003c/li\u003e\n\u003cli\u003e見栄え上プロダクト/サービスの一部と考えられるもの\n\u003cul\u003e\n\u003cli\u003eex. 公開していないが JS のライブラリ, API 用のライブラリとか\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eその他は個人\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e職務著作の観点からは仕事の時間中に開発したものは法人に帰属しますが, 将来にわたって柔軟に運用できればいいなぁと思っています。\u003c/p\u003e","title":"GitHub の会社アカウントで OSS の公開を始めました"},{"content":"Gunma.web#28 に参加しました。\nLT の内容 LazySearch の現状のデプロイの仕組みについて紹介しました。GitHub のリリース機能を利用した方法です。\n感想 「やってみた」系の入門に近い話が多かった みんなコードそんなに書いてないのかな？みたいな気持ち 5 分の LT で話すには物量が多かったので気をつけたい ","permalink":"https://issueoverflow.com/2017/07/19/gunmaweb-28/","summary":"\u003cp\u003e\u003ca href=\"https://gunmaweb.connpass.com/event/59917/\"\u003eGunma.web#28\u003c/a\u003e に参加しました。\u003c/p\u003e\n\u003ch2 id=\"lt-の内容\"\u003eLT の内容\u003c/h2\u003e\n\u003cscript async class=\"speakerdeck-embed\" data-id=\"bc0c21ed8b344390afbd5ec2c19ca907\" data-ratio=\"1.33333333333333\" src=\"//speakerdeck.com/assets/embed.js\"\u003e\u003c/script\u003e\n\u003cp\u003e\u003ca href=\"https://lazysear.ch\"\u003eLazySearch\u003c/a\u003e の現状のデプロイの仕組みについて紹介しました。GitHub のリリース機能を利用した方法です。\u003c/p\u003e\n\u003ch2 id=\"感想\"\u003e感想\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e「やってみた」系の入門に近い話が多かった\n\u003cul\u003e\n\u003cli\u003eみんなコードそんなに書いてないのかな？みたいな気持ち\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e5 分の LT で話すには物量が多かったので気をつけたい\u003c/li\u003e\n\u003c/ul\u003e","title":"Gunma.web#28 に参加しました"},{"content":"$ middleman build 実行時に NO_CONTRACTS=true を付与すると contracts のチェックをスキップしてビルドが速くなる?らしいドキュメントが追加されたのでチェックする。\nhow to disable contracts in jp (#714)\n検証 middleman/middlemanapp.com のビルドで検証する。\nいつもどおり $ bundle exec middleman build を実行。\nbundle exec middleman build 38.93s user 6.62s system 144% cpu 31.414 total NO_CONTRACTS=true を追加 $ NO_CONTRACTS=true bundle exec middleman build を実行。\nNO_CONTRACTS=true bundle exec middleman build 33.19s user 5.73s system 206% cpu 18.863 total 結果 ローカルで適当に実行しているのでブレがあるけれど, とりあえず早くなるらしいことがわかった。\nNO_CONTRACTS については Contracts のドキュメント に書いてありました。\n","permalink":"https://issueoverflow.com/2017/06/04/speed-up-middleman-build-with-no_contracts/","summary":"\u003cp\u003e\u003ccode\u003e$ middleman build\u003c/code\u003e 実行時に \u003ccode\u003eNO_CONTRACTS=true\u003c/code\u003e を付与すると \u003ccode\u003econtracts\u003c/code\u003e のチェックをスキップしてビルドが速くなる?らしいドキュメントが追加されたのでチェックする。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/middleman/middlemanapp.com/commit/7160ec26d95bf696f452958c37ccb9fbd1e27370\"\u003ehow to disable contracts in jp (#714)\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"検証\"\u003e検証\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/middleman/middlemanapp.com\"\u003emiddleman/middlemanapp.com\u003c/a\u003e のビルドで検証する。\u003c/p\u003e\n\u003ch3 id=\"いつもどおり\"\u003eいつもどおり\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003e$ bundle exec middleman build\u003c/code\u003e を実行。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ebundle exec middleman build  38.93s user 6.62s system 144% cpu 31.414 total\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"no_contractstrue-を追加\"\u003e\u003ccode\u003eNO_CONTRACTS=true\u003c/code\u003e を追加\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003e$ NO_CONTRACTS=true bundle exec middleman build\u003c/code\u003e を実行。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eNO_CONTRACTS=true bundle exec middleman build  33.19s user 5.73s system 206% cpu 18.863 total\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"結果\"\u003e結果\u003c/h2\u003e\n\u003cp\u003eローカルで適当に実行しているのでブレがあるけれど, とりあえず早くなるらしいことがわかった。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eNO_CONTRACTS\u003c/code\u003e については \u003ca href=\"https://egonschiele.github.io/contracts.ruby/#disabling-contracts\"\u003eContracts のドキュメント\u003c/a\u003e に書いてありました。\u003c/p\u003e","title":"NO_CONTRACTS で Middleman のビルドを高速化する"},{"content":"正確には 5 月 7 日にリリースしたのだけれど, ドキュメントの最低限の整備もされていない状態でお知らせとしては 5 月 9 日になりました。\nLazySearch beta版がリリースされました | 株式会社フィルイン\n弊社は「群馬で Web サービスをつくる会社」を標榜したまま半年以上の間, 自社のサービスをもたずに来ていました。とりあえずベータリリースではありますが, 一旦サービスとして用意したものがリリースできて良かったです。\nリリース前の紆余曲折 このサービスは当初「Mitsume」という名前で開発が進められていました。\nリリース直前で利用規約を作成する段階になって, 昨年 12 月に同一呼称の商標が出願されていたことが発覚しました。そこで急遽サービス名を検討し直し, コードも必要箇所を変更の上でリリースに至りました。\n商標が大事なのは法務時代からよく知ってはいるんですが, どの程度利益が出せるのか不明瞭な段階で安易に出願するのもおかしな話だと思っています。未だに正解のタイミングがわかりません。\nこれから まだまだ Web UI に未実装の機能が沢山あるので, まずはそこから実装して都度リリース。ある程度完了した段階で課金システムを導入していきたいと思っています。\n","permalink":"https://issueoverflow.com/2017/05/11/released-a-service-quietly-as-beta/","summary":"\u003cp\u003e正確には 5 月 7 日にリリースしたのだけれど, ドキュメントの最低限の整備もされていない状態でお知らせとしては 5 月 9 日になりました。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.fillin-inc.com/releases/2017/05/09/LazySearch-was-released-as-Beta-version/\"\u003eLazySearch beta版がリリースされました | 株式会社フィルイン\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e弊社は「群馬で Web サービスをつくる会社」を標榜したまま半年以上の間, 自社のサービスをもたずに来ていました。とりあえずベータリリースではありますが, 一旦サービスとして用意したものがリリースできて良かったです。\u003c/p\u003e\n\u003ch2 id=\"リリース前の紆余曲折\"\u003eリリース前の紆余曲折\u003c/h2\u003e\n\u003cp\u003eこのサービスは当初「Mitsume」という名前で開発が進められていました。\u003c/p\u003e\n\u003cp\u003eリリース直前で利用規約を作成する段階になって, 昨年 12 月に同一呼称の商標が出願されていたことが発覚しました。そこで急遽サービス名を検討し直し, コードも必要箇所を変更の上でリリースに至りました。\u003c/p\u003e\n\u003cp\u003e商標が大事なのは法務時代からよく知ってはいるんですが, どの程度利益が出せるのか不明瞭な段階で安易に出願するのもおかしな話だと思っています。未だに正解のタイミングがわかりません。\u003c/p\u003e\n\u003ch2 id=\"これから\"\u003eこれから\u003c/h2\u003e\n\u003cp\u003eまだまだ Web UI に未実装の機能が沢山あるので, まずはそこから実装して都度リリース。ある程度完了した段階で課金システムを導入していきたいと思っています。\u003c/p\u003e","title":"サービスをベータ版としてひっそりリリースした"},{"content":"群馬県高崎市で開催する Go 言語の勉強会, Takasaki.go の 2 回目が開催されました。\nTakasaki.go#2 - connpass\n状況 第 1 回は 9 名, 第 2 回は 8 名での開催となりました。\n年齢層は下は 20 代前半から上は 40 代まで上下で 20 歳以上, 業種としては Web サービス開発から SI, 情報系の学生の方といった多彩なメンバーで行われています。\n開催前は 6 名程度で開催できれば上々だなと考えていたので, 現状は嬉しい状態です。\n予定していたけど実行できていないこと 当初可能であれば会場は高崎市内で何箇所がローテーションで開催しようと考えていたのですが, 今のところ適した会場が見つけられていないので Somethin\u0026rsquo; Else さんで開催させていただいています。\n現状の開催会場の条件は次のとおりです。\n無線 LAN がある 10 名程度まで入れる部屋があること 駐車場が使えること 車でのアクセスが問題ないこと 参加者の中には遠方から車で来られている方もいるので車関係の条件が追加されました。しばらくは同会場で開催させていただいてタイミングをみて他会場を検討したいと思っています。\n定期開催で得られているもの Takasaki.go では読書会の前にポジションペーパー(近況) の発表を行っています。この発表があるお陰で諸々の開発へのモチベーションがある程度維持できています。\n弊社は基本 1 人で仕事をしているためモチベーションの維持が大変なのですが, 定期開催のため色々と話ができる機会が生まれています。\nこれまでの agatsuma.survive 等の勉強会については 開催の結果として得られる主催者, 参加者へのメリット をかなり意識して開催していました。例えば「ここまでは必ず学んで貰えるようにしよう」, 「学習のキッカケが作れるようにしよう」といったことです。\n定期開催によって得られる副次的な効果については一切考えていなかったのですが, これはこれで必要なことなのかもしれません。特に地方のプログラマにとっては。\n次回 5/11 (木) の 19 時〜 開催の予定です。会場はまだ確定していませんが前回と同様の開催になるかなと思います。\nこれまで参加されていない方でもし参加したい方がいらっしゃいましたらぜひぜひご参加ください。読書会で読み終わった項目については takasaki-go/logs で確認できます。\n","permalink":"https://issueoverflow.com/2017/04/16/after-finished-takasakgo-2/","summary":"\u003cp\u003e群馬県高崎市で開催する Go 言語の勉強会, Takasaki.go の 2 回目が開催されました。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://takasakigo.connpass.com/event/53761/\"\u003eTakasaki.go#2 - connpass\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"状況\"\u003e状況\u003c/h2\u003e\n\u003cp\u003e第 1 回は 9 名, 第 2 回は 8 名での開催となりました。\u003c/p\u003e\n\u003cp\u003e年齢層は下は 20 代前半から上は 40 代まで上下で 20 歳以上, 業種としては Web サービス開発から SI, 情報系の学生の方といった多彩なメンバーで行われています。\u003c/p\u003e\n\u003cp\u003e開催前は 6 名程度で開催できれば上々だなと考えていたので, 現状は嬉しい状態です。\u003c/p\u003e\n\u003ch2 id=\"予定していたけど実行できていないこと\"\u003e予定していたけど実行できていないこと\u003c/h2\u003e\n\u003cp\u003e当初可能であれば会場は高崎市内で何箇所がローテーションで開催しようと考えていたのですが, 今のところ適した会場が見つけられていないので \u003ca href=\"https://somethingelse.jp/\"\u003eSomethin\u0026rsquo; Else\u003c/a\u003e さんで開催させていただいています。\u003c/p\u003e\n\u003cp\u003e現状の開催会場の条件は次のとおりです。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e無線 LAN がある\u003c/li\u003e\n\u003cli\u003e10 名程度まで入れる部屋があること\u003c/li\u003e\n\u003cli\u003e駐車場が使えること\u003c/li\u003e\n\u003cli\u003e車でのアクセスが問題ないこと\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e参加者の中には遠方から車で来られている方もいるので車関係の条件が追加されました。しばらくは同会場で開催させていただいてタイミングをみて他会場を検討したいと思っています。\u003c/p\u003e\n\u003ch2 id=\"定期開催で得られているもの\"\u003e定期開催で得られているもの\u003c/h2\u003e\n\u003cp\u003eTakasaki.go では読書会の前にポジションペーパー(近況) の発表を行っています。この発表があるお陰で諸々の開発へのモチベーションがある程度維持できています。\u003c/p\u003e\n\u003cp\u003e弊社は基本 1 人で仕事をしているためモチベーションの維持が大変なのですが, 定期開催のため色々と話ができる機会が生まれています。\u003c/p\u003e\n\u003cp\u003eこれまでの agatsuma.survive 等の勉強会については \u003cstrong\u003e開催の結果として得られる主催者, 参加者へのメリット\u003c/strong\u003e をかなり意識して開催していました。例えば「ここまでは必ず学んで貰えるようにしよう」, 「学習のキッカケが作れるようにしよう」といったことです。\u003c/p\u003e\n\u003cp\u003e定期開催によって得られる副次的な効果については一切考えていなかったのですが, これはこれで必要なことなのかもしれません。特に地方のプログラマにとっては。\u003c/p\u003e\n\u003ch2 id=\"次回\"\u003e次回\u003c/h2\u003e\n\u003cp\u003e5/11 (木) の 19 時〜 開催の予定です。会場はまだ確定していませんが前回と同様の開催になるかなと思います。\u003c/p\u003e","title":"Takasaki.go#2 を開催して"},{"content":"このところ歳をとった影響なのか何なのか, git を使ったプロジェクトでリモートへの push 忘れが頻発するようになったので少しは作業環境を見直してみよう, ということで .zshrc とにらめっこしました。\n何が問題なのか 改善前は zsh の RPROMPT (画面の右側) にカレントディレクトリの git のブランチ名を次のような形で表示していました。\n(git)-(feature/current-branch) この表示でわかるのは git リポジトリで尚且つブランチが feature/current-branch にいるということだけでした。\n結果何が起こるかというと「作業し終わって push したつもりで忘れて翌日気づく」といったトラブルです。場合によっては発注元から一切作業しているように見えないまま 1 日経過する, というなんとも芳しくない状態が生まれたりします。\nzsh-git-prompt を使って状態を可視化する 1 から作るのは面倒なので zsh のプラグインか何かを探してみると zsh-git-prompt というのがありました。現在いるブランチから remote との差分まで表示してくれるようです。\nolivierverdier/zsh-git-prompt\nインストールは Mac の Homebrew で対応できました。\n$ brew install zsh-git-prompt 設定を追加して RPROMPT に次のように表示されるようにしました。\nzsh-git-prompt の設定方法 基本は README の Install の通りです。~/.zshrc に次の内容を追加しています。\nsource \u0026#34;/usr/local/opt/zsh-git-prompt/zshrc.sh\u0026#34; ZSH_THEME_GIT_PROMPT_PREFIX=\u0026#34;[\u0026#34; ZSH_THEME_GIT_PROMPT_SUFFIX=\u0026#34; ]\u0026#34; ZSH_THEME_GIT_PROMPT_BRANCH=\u0026#34;%{$fg[white]%}\u0026#34; ZSH_THEME_GIT_PROMPT_STAGED=\u0026#34;%{$fg[green]%}%{ %G%}\u0026#34; ZSH_THEME_GIT_PROMPT_CONFLICTS=\u0026#34;%{$fg[magenta]%}%{x%G%}\u0026#34; ZSH_THEME_GIT_PROMPT_CHANGED=\u0026#34;%{$fg[red]%}%{+%G%}\u0026#34; ZSH_THEME_GIT_PROMPT_BEHIND=\u0026#34;%{$fg[red]%}%{-%G%}\u0026#34; ZSH_THEME_GIT_PROMPT_AHEAD=\u0026#34;%{$fg[green]%}%{+%G%}\u0026#34; ZSH_THEME_GIT_PROMPT_CLEAN=\u0026#34;%{$fg[green]%}%{✔%G%}\u0026#34; RPROMPT=\u0026#39;$(git_super_status)\u0026#39; zshrc.sh を確認するとカスタマイズ可能な変数があるので必要に応じて変更できます。\n私の場合はデフォルトの bold と派手目の色や表示がどうもしっくりこなかったので変更しています。\n注意点として RPROMPT で $(git_super_status) を囲むクォートは 必ずシングルクォート にする必要があります。ダブルクォートにするとディレクトリを移動しても正しく情報が表示されません。(参考: ZSH git prompt not detecting git changes)\nダブルクォートにしてしまいしばらく悩みました。\n","permalink":"https://issueoverflow.com/2017/03/14/how-to-display-the-repository-status-with-zsh-git-prompt/","summary":"\u003cp\u003eこのところ歳をとった影響なのか何なのか, git を使ったプロジェクトでリモートへの push 忘れが頻発するようになったので少しは作業環境を見直してみよう, ということで \u003ccode\u003e.zshrc\u003c/code\u003e とにらめっこしました。\u003c/p\u003e\n\u003ch2 id=\"何が問題なのか\"\u003e何が問題なのか\u003c/h2\u003e\n\u003cp\u003e改善前は zsh の RPROMPT (画面の右側) にカレントディレクトリの git のブランチ名を次のような形で表示していました。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e(git)-(feature/current-branch)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eこの表示でわかるのは git リポジトリで尚且つブランチが \u003ccode\u003efeature/current-branch\u003c/code\u003e にいるということだけでした。\u003c/p\u003e\n\u003cp\u003e結果何が起こるかというと「作業し終わって push したつもりで忘れて翌日気づく」といったトラブルです。場合によっては発注元から一切作業しているように見えないまま 1 日経過する, というなんとも芳しくない状態が生まれたりします。\u003c/p\u003e\n\u003ch2 id=\"zsh-git-prompt-を使って状態を可視化する\"\u003ezsh-git-prompt を使って状態を可視化する\u003c/h2\u003e\n\u003cp\u003e1 から作るのは面倒なので zsh のプラグインか何かを探してみると \u003ccode\u003ezsh-git-prompt\u003c/code\u003e というのがありました。現在いるブランチから remote との差分まで表示してくれるようです。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/olivierverdier/zsh-git-prompt\"\u003eolivierverdier/zsh-git-prompt\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eインストールは Mac の Homebrew で対応できました。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ brew install zsh-git-prompt\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e設定を追加して RPROMPT に次のように表示されるようにしました。\u003c/p\u003e\n\u003cpicture class=\"image-center\"\u003e\n            \u003csource\n                srcset=\"/2017/03/14/how-to-display-the-repository-status-with-zsh-git-prompt/rprompt_hu_9bb30bdcec39742a.webp 411w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\n                type=\"image/webp\"\u003e\n            \u003cimg\n                src=\"/2017/03/14/how-to-display-the-repository-status-with-zsh-git-prompt/rprompt.jpg\"\n                alt=\"改善後の git リポジトリの状態表示\"\n                width=\"411\"\n                height=\"30\"\n                loading=\"lazy\"\n                decoding=\"async\"\n                srcset=\"/2017/03/14/how-to-display-the-repository-status-with-zsh-git-prompt/rprompt.jpg 411w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\u003e\n        \u003c/picture\u003e\n\u003ch2 id=\"zsh-git-prompt-の設定方法\"\u003ezsh-git-prompt の設定方法\u003c/h2\u003e\n\u003cp\u003e基本は \u003ca href=\"https://github.com/olivierverdier/zsh-git-prompt/blob/master/README.md#install\"\u003eREADME の Install\u003c/a\u003e の通りです。\u003ccode\u003e~/.zshrc\u003c/code\u003e に次の内容を追加しています。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esource \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;/usr/local/opt/zsh-git-prompt/zshrc.sh\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eZSH_THEME_GIT_PROMPT_PREFIX\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;[\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eZSH_THEME_GIT_PROMPT_SUFFIX\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34; ]\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eZSH_THEME_GIT_PROMPT_BRANCH\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;%{\u003c/span\u003e$fg\u003cspan style=\"color:#e6db74\"\u003e[white]%}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eZSH_THEME_GIT_PROMPT_STAGED\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;%{\u003c/span\u003e$fg\u003cspan style=\"color:#e6db74\"\u003e[green]%}%{ %G%}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eZSH_THEME_GIT_PROMPT_CONFLICTS\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;%{\u003c/span\u003e$fg\u003cspan style=\"color:#e6db74\"\u003e[magenta]%}%{x%G%}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eZSH_THEME_GIT_PROMPT_CHANGED\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;%{\u003c/span\u003e$fg\u003cspan style=\"color:#e6db74\"\u003e[red]%}%{+%G%}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eZSH_THEME_GIT_PROMPT_BEHIND\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;%{\u003c/span\u003e$fg\u003cspan style=\"color:#e6db74\"\u003e[red]%}%{-%G%}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eZSH_THEME_GIT_PROMPT_AHEAD\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;%{\u003c/span\u003e$fg\u003cspan style=\"color:#e6db74\"\u003e[green]%}%{+%G%}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eZSH_THEME_GIT_PROMPT_CLEAN\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;%{\u003c/span\u003e$fg\u003cspan style=\"color:#e6db74\"\u003e[green]%}%{✔%G%}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eRPROMPT\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;$(git_super_status)\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003ca href=\"https://github.com/olivierverdier/zsh-git-prompt/blob/045d5a5deff183dbe131867b67f744b177e0997c/zshrc.sh#L95-L106\"\u003ezshrc.sh\u003c/a\u003e を確認するとカスタマイズ可能な変数があるので必要に応じて変更できます。\u003c/p\u003e","title":"zsh-git-prompt を使って git リポジトリの状態を表示する方法"},{"content":" 昨年末に ahomu さんのブログで HHKB にパームレストを組合せて使用しているのを見て「いいなぁ」と思ったのがきっかけでした。\n2016年に買って良かったと思ったもの ::ハブろぐ\nなぜ自作なのか 継続して利用するのがはっきりしているなら商品をそのまま購入するのが楽なのですが, 買ってみたところで本当に使っていくかわからないので躊躇していました。\nググってみたところ自作している人もいらっしゃるようだし, 木製のものなら試用できるだけのものなら作れそうだったので自作を選択した訳です。\nパームレストのレシピ 1. 良さそうなサイズの木材をホームセンターで見つける 近所のホームセンターで 20(or 19) x 90 x 910 (mm) のパイン材を見つけたので, これをベースに加工しました。材料自体は 190 円くらいでした。\n木材のカットサービスを利用して 300 mm * 3 にしてもらいました。カット代は 150 円くらいでした。\n木材のサイズについては販売されている木製パームレストを参考に選定しています。材料は 1 つだけ用意できれば良かったのですが加工に失敗した場合も考慮して余分に用意しています。\n2. ヤスリがけ 紙やすりで問題にならない程度にヤスリがけをします。角はもちろん丸くなるように。用意できるのであればサンドペーパーホルダーのようなものがあると作業が早いです。\n100 番でざっと整えてから 400 番でツルツルになるようにしました。紙やすりは 1 枚 60 円くらいだったかと思います。\n3. ヤスリで出た粉を落とす 雑巾で拭く程度で足りるかと思っていたんですが, 細かい粉が取り切れなかったのでザッと水洗いをしました。雑巾でふいてしばらく乾かして完成です。\nその他 塗装について 塗装は数回塗る必要があったり, 塗装後に薄く研磨する必要があったりするので省略しました。かかる時間を考えれば塗装込であれば商品を購入したほうが良さそうです。\n滑り止めのゴム足について 材料は購入しましたが結局付けていません。デスクマットを併用しているので必要なさそうです。\n高さが不足している場合には調整材として有用かもしれません。その場合は木材の高さとゴム足の高さを考慮して購入したほうが良さそうです。\n使ってみて 無いよりよっぽどタイピングが楽になりました。長時間コードを書く場合は手首が痛くなることが多かったですが改善された気がします。\n作り直す機会があるなら商品を購入するか, オイルステインをつかってキレイに仕上げてみたいと思います。\n","permalink":"https://issueoverflow.com/2017/03/09/how-to-make-palm-rest-for-hhkb/","summary":"\u003cpicture class=\"image-center\"\u003e\n            \u003csource\n                srcset=\"/2017/03/09/how-to-make-palm-rest-for-hhkb/palmrest_hu_13137a8c4c1ccf55.webp 480w, /2017/03/09/how-to-make-palm-rest-for-hhkb/palmrest_hu_9156c18fbedb7a6f.webp 600w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\n                type=\"image/webp\"\u003e\n            \u003cimg\n                src=\"/2017/03/09/how-to-make-palm-rest-for-hhkb/palmrest.jpg\"\n                alt=\"自作した木製パームレスト\"\n                width=\"600\"\n                height=\"450\"\n                loading=\"lazy\"\n                decoding=\"async\"\n                srcset=\"/2017/03/09/how-to-make-palm-rest-for-hhkb/palmrest_hu_25a386aacbd16ef2.jpg 480w, /2017/03/09/how-to-make-palm-rest-for-hhkb/palmrest.jpg 600w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\u003e\n        \u003c/picture\u003e\n\u003cp\u003e昨年末に ahomu さんのブログで HHKB にパームレストを組合せて使用しているのを見て「いいなぁ」と思ったのがきっかけでした。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://havelog.ayumusato.com/misc/e733-2016_bought_items.html\"\u003e2016年に買って良かったと思ったもの ::ハブろぐ\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"なぜ自作なのか\"\u003eなぜ自作なのか\u003c/h2\u003e\n\u003cp\u003e継続して利用するのがはっきりしているなら商品をそのまま購入するのが楽なのですが, 買ってみたところで本当に使っていくかわからないので躊躇していました。\u003c/p\u003e\n\u003cp\u003eググってみたところ自作している人もいらっしゃるようだし, 木製のものなら試用できるだけのものなら作れそうだったので自作を選択した訳です。\u003c/p\u003e\n\u003ch2 id=\"パームレストのレシピ\"\u003eパームレストのレシピ\u003c/h2\u003e\n\u003ch3 id=\"1-良さそうなサイズの木材をホームセンターで見つける\"\u003e1. 良さそうなサイズの木材をホームセンターで見つける\u003c/h3\u003e\n\u003cp\u003e近所のホームセンターで 20(or 19) x 90 x 910 (mm) のパイン材を見つけたので, これをベースに加工しました。材料自体は 190 円くらいでした。\u003c/p\u003e\n\u003cp\u003e木材のカットサービスを利用して 300 mm * 3 にしてもらいました。カット代は 150 円くらいでした。\u003c/p\u003e\n\u003cp\u003e木材のサイズについては販売されている木製パームレストを参考に選定しています。材料は 1 つだけ用意できれば良かったのですが加工に失敗した場合も考慮して余分に用意しています。\u003c/p\u003e\n\u003ch3 id=\"2-ヤスリがけ\"\u003e2. ヤスリがけ\u003c/h3\u003e\n\u003cp\u003e紙やすりで問題にならない程度にヤスリがけをします。角はもちろん丸くなるように。用意できるのであればサンドペーパーホルダーのようなものがあると作業が早いです。\u003c/p\u003e\n\u003cp\u003e100 番でざっと整えてから 400 番でツルツルになるようにしました。紙やすりは 1 枚 60 円くらいだったかと思います。\u003c/p\u003e\n\u003ch3 id=\"3-ヤスリで出た粉を落とす\"\u003e3. ヤスリで出た粉を落とす\u003c/h3\u003e\n\u003cp\u003e雑巾で拭く程度で足りるかと思っていたんですが, 細かい粉が取り切れなかったのでザッと水洗いをしました。雑巾でふいてしばらく乾かして完成です。\u003c/p\u003e\n\u003ch2 id=\"その他\"\u003eその他\u003c/h2\u003e\n\u003ch3 id=\"塗装について\"\u003e塗装について\u003c/h3\u003e\n\u003cp\u003e塗装は数回塗る必要があったり, 塗装後に薄く研磨する必要があったりするので省略しました。かかる時間を考えれば塗装込であれば商品を購入したほうが良さそうです。\u003c/p\u003e\n\u003ch3 id=\"滑り止めのゴム足について\"\u003e滑り止めのゴム足について\u003c/h3\u003e\n\u003cp\u003e材料は購入しましたが結局付けていません。デスクマットを併用しているので必要なさそうです。\u003c/p\u003e","title":"HHKB 用のパームレストの作り方"},{"content":" Takasaki.go#1 - connpass\nというわけで高崎で Go 言語の勉強会を始めます。 継続的に続ける形態は初めてなので気長にやっていきたいと思ってはいる。\n開催形態 頻度・時間 月 1 回(毎月第 2 木曜日予定) 18:30 開場 19:00 〜 21:00 開催 会場 高崎市内のコワーキングスペース, 会議室などを予定 可能であれば一箇所に固定せず市内を移動しながら 内容 ポジションペーパーの発表 (自己紹介, 近況など) 読書会 (最初は Tour of Go から) 参加者募集方法 connpass の Takasaki.go を利用 ","permalink":"https://issueoverflow.com/2017/02/22/takasaki-go-1/","summary":"\u003cpicture class=\"image-center\"\u003e\n            \u003csource\n                srcset=\"/2017/02/22/takasaki-go-1/takasaki.go_hu_74111269d6d8764d.webp 250w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\n                type=\"image/webp\"\u003e\n            \u003cimg\n                src=\"/2017/02/22/takasaki-go-1/takasaki.go.png\"\n                alt=\"Takasaki.go ロゴ\"\n                width=\"250\"\n                height=\"250\"\n                loading=\"lazy\"\n                decoding=\"async\"\n                srcset=\"/2017/02/22/takasaki-go-1/takasaki.go.png 250w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\u003e\n        \u003c/picture\u003e\n\u003cp\u003e\u003ca href=\"https://takasakigo.connpass.com/event/51741/\"\u003eTakasaki.go#1 - connpass\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eというわけで高崎で Go 言語の勉強会を始めます。\n継続的に続ける形態は初めてなので気長にやっていきたいと思ってはいる。\u003c/p\u003e\n\u003ch2 id=\"開催形態\"\u003e開催形態\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e頻度・時間\n\u003cul\u003e\n\u003cli\u003e月 1 回(毎月第 2 木曜日予定)\u003c/li\u003e\n\u003cli\u003e18:30 開場\u003c/li\u003e\n\u003cli\u003e19:00 〜 21:00 開催\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e会場\n\u003cul\u003e\n\u003cli\u003e高崎市内のコワーキングスペース, 会議室などを予定\u003c/li\u003e\n\u003cli\u003e可能であれば一箇所に固定せず市内を移動しながら\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e内容\n\u003cul\u003e\n\u003cli\u003eポジションペーパーの発表 (自己紹介, 近況など)\u003c/li\u003e\n\u003cli\u003e読書会 (最初は Tour of Go から)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e参加者募集方法\n\u003cul\u003e\n\u003cli\u003econnpass の \u003ca href=\"https://takasakigo.connpass.com/\"\u003eTakasaki.go\u003c/a\u003e を利用\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e","title":"Takasaki.go#1 を開催します"},{"content":" 32 歳で初めて凶を引きました。\nおみくじ自体は「何にもいいことないから頑張って我慢な！」といった内容でした。\nあまりこういったものは信じないようにしているんですが, プライベートでよくないことが続いた気分転換も兼ねたお出かけ先で凶を弾いてしまったので「踏んだり蹴ったりだな!」といった気持ちになりました。\n","permalink":"https://issueoverflow.com/2017/02/21/misfortune-for-the-first-time/","summary":"\u003cpicture\u003e\n            \u003csource\n                srcset=\"/2017/02/21/misfortune-for-the-first-time/omikuji_hu_8889d98f61812076.webp 480w, /2017/02/21/misfortune-for-the-first-time/omikuji_hu_72d73d4509ae1b41.webp 600w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\n                type=\"image/webp\"\u003e\n            \u003cimg\n                src=\"/2017/02/21/misfortune-for-the-first-time/omikuji.jpg\"\n                alt=\"凶のおみくじ\"\n                width=\"600\"\n                height=\"420\"\n                loading=\"lazy\"\n                decoding=\"async\"\n                srcset=\"/2017/02/21/misfortune-for-the-first-time/omikuji_hu_37673776fab78724.jpg 480w, /2017/02/21/misfortune-for-the-first-time/omikuji.jpg 600w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\u003e\n        \u003c/picture\u003e\n\u003cp\u003e32 歳で初めて凶を引きました。\u003c/p\u003e\n\u003cp\u003eおみくじ自体は「何にもいいことないから頑張って我慢な！」といった内容でした。\u003c/p\u003e\n\u003cp\u003eあまりこういったものは信じないようにしているんですが, プライベートでよくないことが続いた気分転換も兼ねたお出かけ先で凶を弾いてしまったので「踏んだり蹴ったりだな!」といった気持ちになりました。\u003c/p\u003e","title":"人生で初めて凶をひいた"},{"content":"会社を作ってしばらく経ちますが, なぜ「群馬で Web サービスをつくる会社」を標榜しているのかといった話をあまりする機会もないのでまとめてみる次第です。\n株式会社フィルイン | 群馬でWebサービスをつくる会社\n会社名の由来 会社名の フィルイン は英語で「隙間を埋めるもの」という意味から来ています。\n個人事業主の頃から事業として OSS の活動として「足りないものを埋める」といったスタンスでプログラムを書いてきました。法人設立後の事業内容としても継続していくことになるだろうというところで社名に決定しました。\n群馬県内の状況とどうやっていくか問題 群馬県内の状況というのは都内から 100km 程度といえどなかなかの状態です。\nそもそも人がいない スキルが上がったところで給与はあまり上がらない 新しい技術を試しづらい環境や事業内容 できる人は高崎駅から新幹線で都内に通勤してる現実 この環境の中で事業を行っていくには人材の確保と育成が必須になってきます。他社さんがどういう風に考えているかはわからないのですが, 特にこれといって取り組みは見当たりませんでした。\n個人事業からやってきたことを考えれば受託開発を中心としたシステム開発を進めていけばよかったのですが, それだけでは中長期的に厳しいと考えています。外部環境を含めた問題点を整理した結果, 次のことをやっていこうという考えに至りました。\n1〜2 程度を雇用できる程度の現実的な Web サービスの企画・開発・運営 特に都内と遜色なく戦えそうな分野 雇用しつつ次のサービス開発へ Web サービスの開発や長期運用を元にした人材育成 新しい技術の投入機会の確保 集積したナレッジと人材を活用した他業種の Web サービス参入支援 プログラマ人材の活躍領域の拡張 Web サービスの開発を行いつつ, 受託開発によってキャッシュフローの維持を行っているのが現状です。もっとカッコよく投資がどうのこうのといったお話ができるといいのですが, お金を入れたところで人材の確保は群馬県内では難しいのでないかなと考えています。\nなぜ「Web サービスをつくる」会社なのか 結論としては 継続的に群馬県内で事業を行っていく上で必要な環境をつくるため です。\nブランディングとして同業他社さん以外の企業に対しても一体どんな会社なのか漠然としたイメージをもってもらうためでもあります。システム開発といっても普通の人はどんな仕事をしてくれるのかイメージできないのが普通です。\n最後に 弊社は技術スタックとしては PHP, Ruby(on Rails), Golang, JavaScript をベースにインフラまわりでは ansible や terraform, packer などの Hashicorp tools を採用しています。サーバについては使っているツールの都合もあり DigitalOcean, AWS が中心になります。県内の小さな会社ではかなり珍しい構成になるかと思います。\n新しいものである程度安定的に使える見込みが立つもの, 問題を解決してくれるライブラル, ツールやサービスについては積極的に採用していくスタンスです。 もしご興味のある方がいらっしゃいましたらお気軽にご連絡・お問い合わせください。\nお問い合わせ | 株式会社フィルイン -群馬でWebサービスを作る会社-\n","permalink":"https://issueoverflow.com/2017/01/30/reason-for-advocating-a-company-that-creates-web-services-in-gunma/","summary":"\u003cp\u003e会社を作ってしばらく経ちますが, なぜ「群馬で Web サービスをつくる会社」を標榜しているのかといった話をあまりする機会もないのでまとめてみる次第です。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.fillin-inc.com/\"\u003e株式会社フィルイン | 群馬でWebサービスをつくる会社\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"会社名の由来\"\u003e会社名の由来\u003c/h2\u003e\n\u003cp\u003e会社名の \u003cstrong\u003eフィルイン\u003c/strong\u003e は英語で「隙間を埋めるもの」という意味から来ています。\u003c/p\u003e\n\u003cp\u003e個人事業主の頃から事業として OSS の活動として「足りないものを埋める」といったスタンスでプログラムを書いてきました。法人設立後の事業内容としても継続していくことになるだろうというところで社名に決定しました。\u003c/p\u003e\n\u003ch2 id=\"群馬県内の状況とどうやっていくか問題\"\u003e群馬県内の状況とどうやっていくか問題\u003c/h2\u003e\n\u003cp\u003e群馬県内の状況というのは都内から 100km 程度といえどなかなかの状態です。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eそもそも人がいない\u003c/li\u003e\n\u003cli\u003eスキルが上がったところで給与はあまり上がらない\n\u003cul\u003e\n\u003cli\u003e新しい技術を試しづらい環境や事業内容\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eできる人は高崎駅から新幹線で都内に通勤してる現実\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eこの環境の中で事業を行っていくには人材の確保と育成が必須になってきます。他社さんがどういう風に考えているかはわからないのですが, 特にこれといって取り組みは見当たりませんでした。\u003c/p\u003e\n\u003cp\u003e個人事業からやってきたことを考えれば受託開発を中心としたシステム開発を進めていけばよかったのですが, それだけでは中長期的に厳しいと考えています。外部環境を含めた問題点を整理した結果, 次のことをやっていこうという考えに至りました。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e1〜2 程度を雇用できる程度の現実的な Web サービスの企画・開発・運営\u003c/li\u003e\n\u003c/ol\u003e\n\u003cul\u003e\n\u003cli\u003e特に都内と遜色なく戦えそうな分野\u003c/li\u003e\n\u003cli\u003e雇用しつつ次のサービス開発へ\u003c/li\u003e\n\u003c/ul\u003e\n\u003col start=\"2\"\u003e\n\u003cli\u003eWeb サービスの開発や長期運用を元にした人材育成\u003c/li\u003e\n\u003c/ol\u003e\n\u003cul\u003e\n\u003cli\u003e新しい技術の投入機会の確保\u003c/li\u003e\n\u003c/ul\u003e\n\u003col start=\"3\"\u003e\n\u003cli\u003e集積したナレッジと人材を活用した他業種の Web サービス参入支援\u003c/li\u003e\n\u003c/ol\u003e\n\u003cul\u003e\n\u003cli\u003eプログラマ人材の活躍領域の拡張\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWeb サービスの開発を行いつつ, 受託開発によってキャッシュフローの維持を行っているのが現状です。もっとカッコよく投資がどうのこうのといったお話ができるといいのですが, お金を入れたところで人材の確保は群馬県内では難しいのでないかなと考えています。\u003c/p\u003e\n\u003ch2 id=\"なぜweb-サービスをつくる会社なのか\"\u003eなぜ「Web サービスをつくる」会社なのか\u003c/h2\u003e\n\u003cp\u003e結論としては \u003cstrong\u003e継続的に群馬県内で事業を行っていく上で必要な環境をつくるため\u003c/strong\u003e です。\u003c/p\u003e\n\u003cp\u003eブランディングとして同業他社さん以外の企業に対しても一体どんな会社なのか漠然としたイメージをもってもらうためでもあります。システム開発といっても普通の人はどんな仕事をしてくれるのかイメージできないのが普通です。\u003c/p\u003e\n\u003ch2 id=\"最後に\"\u003e最後に\u003c/h2\u003e\n\u003cp\u003e弊社は技術スタックとしては PHP, Ruby(on Rails), Golang, JavaScript をベースにインフラまわりでは ansible や terraform, packer などの Hashicorp tools を採用しています。サーバについては使っているツールの都合もあり DigitalOcean, AWS が中心になります。県内の小さな会社ではかなり珍しい構成になるかと思います。\u003c/p\u003e\n\u003cp\u003e新しいものである程度安定的に使える見込みが立つもの, 問題を解決してくれるライブラル, ツールやサービスについては積極的に採用していくスタンスです。\nもしご興味のある方がいらっしゃいましたらお気軽にご連絡・お問い合わせください。\u003c/p\u003e","title":"「群馬で Web サービスをつくる会社」を標榜する理由"},{"content":"時間が合えば参加している Gunma.web ですが 26 回目となりました。Gunma.web #26 - connpass\nLT の内容 HeadlessCMS という CMS の新しいアーキテクチャについて話しました。\n1 年ほど前から海外 (アメリカ?) では話題になっていたようです。この用語の定義がされる以前から contentful などの API サービスを知っていたので, 「新しく出てきた」というより「API のアレ」みたいに読んでいたものの名前が決まった, と言ったほうが正しいかもしれません。\n感想 人がいっぱいいる ゲストでさくらインターネットの横田さんがいらっしゃったが豪華だった シングルボードコンピュータまわりの話題が多かった 別で何かやったほうが良さそう その他 終了後に勉強会参加者の方から「年内に群馬で RailsGirls を開催したいので, スポンサーして欲しい」旨のお話をいただきました。弊社はまだ設立したばかりで収益が不安定なので, 実際の開催のタイミングとお財布事情を考慮してスポンサードなどなどしたいと思っています。\nまだ話は進んでいないようなので今後の進捗に期待したいと思います。\n","permalink":"https://issueoverflow.com/2017/01/22/gunmaweb-26/","summary":"\u003cp\u003e時間が合えば参加している Gunma.web ですが 26 回目となりました。\u003ca href=\"https://gunmaweb.connpass.com/event/47399/\"\u003eGunma.web #26 - connpass\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"lt-の内容\"\u003eLT の内容\u003c/h2\u003e\n\u003cscript async class=\"speakerdeck-embed\" data-id=\"f156c323381742c885d3c668aa1b8784\" data-ratio=\"1.33333333333333\" src=\"//speakerdeck.com/assets/embed.js\"\u003e\u003c/script\u003e\n\u003cp\u003eHeadlessCMS という CMS の新しいアーキテクチャについて話しました。\u003c/p\u003e\n\u003cp\u003e1 年ほど前から海外 (アメリカ?) では話題になっていたようです。この用語の定義がされる以前から \u003ca href=\"https://www.contentful.com/\"\u003econtentful\u003c/a\u003e などの API サービスを知っていたので, 「新しく出てきた」というより「API のアレ」みたいに読んでいたものの名前が決まった, と言ったほうが正しいかもしれません。\u003c/p\u003e\n\u003ch2 id=\"感想\"\u003e感想\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e人がいっぱいいる\u003c/li\u003e\n\u003cli\u003eゲストでさくらインターネットの横田さんがいらっしゃったが豪華だった\u003c/li\u003e\n\u003cli\u003eシングルボードコンピュータまわりの話題が多かった\n\u003cul\u003e\n\u003cli\u003e別で何かやったほうが良さそう\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"その他\"\u003eその他\u003c/h2\u003e\n\u003cp\u003e終了後に勉強会参加者の方から「年内に群馬で RailsGirls を開催したいので, スポンサーして欲しい」旨のお話をいただきました。弊社はまだ設立したばかりで収益が不安定なので, 実際の開催のタイミングとお財布事情を考慮してスポンサードなどなどしたいと思っています。\u003c/p\u003e\n\u003cp\u003eまだ話は進んでいないようなので今後の進捗に期待したいと思います。\u003c/p\u003e","title":"Gunma.web#26 に参加しました"},{"content":"2018 年版用意しました。https://issueoverflow.com/2018/07/19/takasaki-share-office-information-2018/\n2016 年 9 月に高崎市で株式会社を設立しました。その際にシェアオフィスを調査・検討しました。その当時の情報を元に高崎市内のシェアオフィス情報をまとめてみたいと思います。\nなぜシェアオフィスを選んだか 設立当初から次のようなことを考えていた結果です。\n必要になるまで持たなくてもいいものは持たない 個人事業時代からの流れで家で仕事する方が楽だ オフィスは掃除しないといけないので, その分のコストがかかる 来客は今のところ来る予定がない 予算もない状態だったので, 特に固定費が定期的にかかってくるものについてはできるだけ避けておきたい, というのが一番の理由な気がします。\nどういう条件で探したか 法人登記が可能なところ できるだけ 24 時間営業 変な人(ネットワークビジネスとかスピリチュアルとか) がいないところ 自宅から苦にならない程度の距離(自転車, 電車など) 調査検討したシェアオフィス一覧 起業家の森 ※ 2017/02/01 より名称が Somethin\u0026rsquo; Else に変わりました\nURL: http://eshareoffice.jp/848 所在地: 高崎市小八木町\n自宅から近く登記可能なシェアオフィス兼コワーキングスペースだったので検討対象になりました。定期的にイベントが開催されていたりもしたので第一印象で「良さそうだなぁ」と思いました。\n立地は工業団地の中で周囲に飲食できる場所が少ない, という問題がありかなり悩んだオフィスになります。シェアオフィスの隣には個室タイプの小さなオフィスも構えられていて継続的な利用もできる可能性がありました。\nSomethin\u0026rsquo; Else ※ 起業家の森から名称変更\nURL: https://somethingelse.jp/ 所在地: 高崎市小八木町\n2017/02/01 より起業家の森の管理が㈱フェアマインドになり名称が Somethin\u0026rsquo; Else に変わりました。同じ建物ですがフェアマインド社のオフィス部分が追加されたためレイアウトに変更があったようです。\nIPPO URL: http://eshareoffice.jp/1236 所在地: 高崎市問屋町西\n高崎市にできた一番新しいシェアオフィスです。料金は高めの 5 万円〜6 万円程度からといった設定ですが, 個室だったり 24 時間利用可だったりと設備も充実していてお値段相応といった価格です。\n高崎問屋町駅から徒歩圏内ではあるので検討対象になりました。現在の弊社の状況だとちょっとお高いなぁといったところです。\nSOHO ガーデン高崎 URL: https://www.takasaki-urbanhotel.com/contents/soho/ 所在地: 高崎市八島町\n高崎駅西口にひっそりと存在するシェアオフィスです。高崎アーバンホテルの中にあります。現在弊社はこちらのシェアオフィスに登記しています。\n高崎駅からすぐの場所にあり私書箱に登記可能, 基本 24 時間利用可, ただしインキュベーション施設の立ち位置なので利用できるのは最大 2 年というルールがあります。都内の MTG から新幹線で高崎駅に戻り, そこからオフィスに寄るということも可能です。\n高崎産業創造館 URL: https://www.sansoukan.jp/ 所在地: 高崎市下之城町\n市のインキュベーション施設なんですが, よっぽどタイミングが合わないと満室で入居できないので早めに諦めました。安く入居できるらしいです。\n最後に 高崎市内でもシェアオフィスの充実や起業関連イベントの開催など充実してきています。都内に比較すればまだまだ足りないものがある気がしますが, とりあえずやっていける状態ではあります。\nSOHO ガーデンの 2 年縛り終了までにはオフイスに移れるように頑張りたいところです。\n変更履歴 2017/02/03: Somethin\u0026rsquo; Else 追加と起業家の森名称変更追記 ","permalink":"https://issueoverflow.com/2017/01/20/takasaki-share-office-information-2017/","summary":"\u003cp\u003e\u003cstrong\u003e2018 年版用意しました。https://issueoverflow.com/2018/07/19/takasaki-share-office-information-2018/\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e2016 年 9 月に高崎市で株式会社を設立しました。その際にシェアオフィスを調査・検討しました。その当時の情報を元に高崎市内のシェアオフィス情報をまとめてみたいと思います。\u003c/p\u003e\n\u003ch2 id=\"なぜシェアオフィスを選んだか\"\u003eなぜシェアオフィスを選んだか\u003c/h2\u003e\n\u003cp\u003e設立当初から次のようなことを考えていた結果です。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e必要になるまで持たなくてもいいものは持たない\u003c/li\u003e\n\u003cli\u003e個人事業時代からの流れで家で仕事する方が楽だ\u003c/li\u003e\n\u003cli\u003eオフィスは掃除しないといけないので, その分のコストがかかる\u003c/li\u003e\n\u003cli\u003e来客は今のところ来る予定がない\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e予算もない状態だったので, 特に固定費が定期的にかかってくるものについてはできるだけ避けておきたい, というのが一番の理由な気がします。\u003c/p\u003e\n\u003ch2 id=\"どういう条件で探したか\"\u003eどういう条件で探したか\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e法人登記が可能なところ\u003c/li\u003e\n\u003cli\u003eできるだけ 24 時間営業\u003c/li\u003e\n\u003cli\u003e変な人(ネットワークビジネスとかスピリチュアルとか) がいないところ\u003c/li\u003e\n\u003cli\u003e自宅から苦にならない程度の距離(自転車, 電車など)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"調査検討したシェアオフィス一覧\"\u003e調査検討したシェアオフィス一覧\u003c/h2\u003e\n\u003ch3 id=\"起業家の森\"\u003e起業家の森\u003c/h3\u003e\n\u003cp\u003e※ 2017/02/01 より名称が Somethin\u0026rsquo; Else に変わりました\u003c/p\u003e\n\u003cp\u003eURL: \u003ca href=\"http://eshareoffice.jp/848\"\u003ehttp://eshareoffice.jp/848\u003c/a\u003e \u003cbr\u003e\n所在地: 高崎市小八木町\u003c/p\u003e\n\u003cp\u003e自宅から近く登記可能なシェアオフィス兼コワーキングスペースだったので検討対象になりました。定期的にイベントが開催されていたりもしたので第一印象で「良さそうだなぁ」と思いました。\u003c/p\u003e\n\u003cp\u003e立地は工業団地の中で周囲に飲食できる場所が少ない, という問題がありかなり悩んだオフィスになります。シェアオフィスの隣には個室タイプの小さなオフィスも構えられていて継続的な利用もできる可能性がありました。\u003c/p\u003e\n\u003ch3 id=\"somethin-else\"\u003eSomethin\u0026rsquo; Else\u003c/h3\u003e\n\u003cp\u003e※ 起業家の森から名称変更\u003c/p\u003e\n\u003cp\u003eURL: \u003ca href=\"https://somethingelse.jp/\"\u003ehttps://somethingelse.jp/\u003c/a\u003e \u003cbr\u003e\n所在地: 高崎市小八木町\u003c/p\u003e\n\u003cp\u003e2017/02/01 より起業家の森の管理が㈱フェアマインドになり名称が Somethin\u0026rsquo; Else に変わりました。同じ建物ですがフェアマインド社のオフィス部分が追加されたためレイアウトに変更があったようです。\u003c/p\u003e\n\u003ch3 id=\"ippo\"\u003eIPPO\u003c/h3\u003e\n\u003cp\u003eURL: \u003ca href=\"http://eshareoffice.jp/1236\"\u003ehttp://eshareoffice.jp/1236\u003c/a\u003e \u003cbr\u003e\n所在地: 高崎市問屋町西\u003c/p\u003e\n\u003cp\u003e高崎市にできた一番新しいシェアオフィスです。料金は高めの 5 万円〜6 万円程度からといった設定ですが, 個室だったり 24 時間利用可だったりと設備も充実していてお値段相応といった価格です。\u003c/p\u003e\n\u003cp\u003e高崎問屋町駅から徒歩圏内ではあるので検討対象になりました。現在の弊社の状況だとちょっとお高いなぁといったところです。\u003c/p\u003e\n\u003ch3 id=\"soho-ガーデン高崎\"\u003eSOHO ガーデン高崎\u003c/h3\u003e\n\u003cp\u003eURL: \u003ca href=\"https://www.takasaki-urbanhotel.com/contents/soho/\"\u003ehttps://www.takasaki-urbanhotel.com/contents/soho/\u003c/a\u003e \u003cbr\u003e\n所在地: 高崎市八島町\u003c/p\u003e\n\u003cp\u003e高崎駅西口にひっそりと存在するシェアオフィスです。高崎アーバンホテルの中にあります。現在弊社はこちらのシェアオフィスに登記しています。\u003c/p\u003e\n\u003cp\u003e高崎駅からすぐの場所にあり私書箱に登記可能, 基本 24 時間利用可, ただしインキュベーション施設の立ち位置なので利用できるのは最大 2 年というルールがあります。都内の MTG から新幹線で高崎駅に戻り, そこからオフィスに寄るということも可能です。\u003c/p\u003e","title":"高崎シェアオフィス情報 2017"},{"content":"このブログもある程度記事を書き慣れてきたので現在使っている Makefile を公開してみます。\nなぜ make を使うのか Golang ベースのプロジェクトでは make が利用されることが多い, と みんなの Go 言語 に書かれていました。そのため, このブログでは Golang 製の Hugo を使っているため build や新しい記事を追加する場合には make を利用しています。\nこのところ Ruby をお仕事で多用しているので rake を使うのも手なのですが, 勉強も兼ねて make を採用しています。これまであまり make を使ってこなかったので細かい部分で時々ハマったりしています。\nMakefile の内容 make でコマンドを実行するためには Makefile が必要です。IssueOverflow 執筆時には次のコマンドを用意しています。\nsetup: 必要なコマンド等をインストール server: ローカルサーバを起動 build: 記事をビルド article: 新しい記事ファイルを追加 アセット用ディレクトリを用意 branch を article/something-title に変更 help: Makefile に用意されたコマンド一覧を表示 Makefile 自体は次の内容になります。\n## setup setup: go get -u -v github.com/kardianos/govendor go get -u -v github.com/spf13/hugo cd $(GOPATH)/src/github.com/spf13/hugo \u0026amp;\u0026amp; govendor sync \u0026amp;\u0026amp; go install go get github.com/Songmu/make2help/cmd/make2help go get -u -v github.com/mattn/go-colorable pip install Pygments git submodule sync git submodule update --init --recursive ## local server server: hugo server --buildDrafts --watch ## build build: hugo -v ## article ex: make article TITLE=\u0026#34;title\u0026#34; article: git checkout master hugo new articles/`echo $(TITLE) | tr \u0026#39;[:upper:]\u0026#39; \u0026#39;[:lower:]\u0026#39; | sed -e \u0026#39;s/ /-/g\u0026#39;`.md mkdir -p content/articles/`date +\u0026#34;%Y\u0026#34;`/`date +\u0026#34;%m\u0026#34;`/`date +\u0026#34;%d\u0026#34;`/`echo $(TITLE) | tr \u0026#39;[:upper:]\u0026#39; \u0026#39;[:lower:]\u0026#39; | sed -e \u0026#39;s/ /-/g\u0026#39;` git checkout -b article/`echo $(TITLE) | tr \u0026#39;[:upper:]\u0026#39; \u0026#39;[:lower:]\u0026#39; | sed -e \u0026#39;s/ /-/g\u0026#39;` ## help help: @make2help $(MAKEFILE_LIST) $ make help を実行した場合, 次の内容が表示されます。\n工夫しているところ $ make article TITLE='Something New Article' する場合に TITLE に与えられた文字列を小文字化し, スペースを - に置換しています。これにより日本語タイトルをそれっぽく翻訳した英語タイトルをそのまま TITLE に渡せばファイルが用意され, article/something-new-article ブランチに git checkout されます。\n","permalink":"https://issueoverflow.com/2017/01/08/makefile-i-use-when-writing-articles-with-issueoveflow/","summary":"\u003cp\u003eこのブログもある程度記事を書き慣れてきたので現在使っている Makefile を公開してみます。\u003c/p\u003e\n\u003ch2 id=\"なぜ-make-を使うのか\"\u003eなぜ make を使うのか\u003c/h2\u003e\n\u003cp\u003eGolang ベースのプロジェクトでは make が利用されることが多い, と \u003ca href=\"https://gihyo.jp/book/2016/978-4-7741-8392-3\"\u003eみんなの Go 言語\u003c/a\u003e に書かれていました。そのため, このブログでは Golang 製の Hugo を使っているため build や新しい記事を追加する場合には make を利用しています。\u003c/p\u003e\n\u003cp\u003eこのところ Ruby をお仕事で多用しているので \u003ca href=\"https://github.com/ruby/rake\"\u003erake\u003c/a\u003e を使うのも手なのですが, 勉強も兼ねて make を採用しています。これまであまり make を使ってこなかったので細かい部分で時々ハマったりしています。\u003c/p\u003e\n\u003ch2 id=\"makefile-の内容\"\u003eMakefile の内容\u003c/h2\u003e\n\u003cp\u003emake でコマンドを実行するためには Makefile が必要です。IssueOverflow 執筆時には次のコマンドを用意しています。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003esetup: 必要なコマンド等をインストール\u003c/li\u003e\n\u003cli\u003eserver: ローカルサーバを起動\u003c/li\u003e\n\u003cli\u003ebuild: 記事をビルド\u003c/li\u003e\n\u003cli\u003earticle: 新しい記事ファイルを追加\n\u003cul\u003e\n\u003cli\u003eアセット用ディレクトリを用意\u003c/li\u003e\n\u003cli\u003ebranch を article/something-title に変更\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ehelp: Makefile に用意されたコマンド一覧を表示\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eMakefile 自体は次の内容になります。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## setup\nsetup:\n\tgo get -u -v github.com/kardianos/govendor\n\tgo get -u -v github.com/spf13/hugo\n\tcd $(GOPATH)/src/github.com/spf13/hugo \u0026amp;\u0026amp; govendor sync \u0026amp;\u0026amp; go install\n\tgo get github.com/Songmu/make2help/cmd/make2help\n\tgo get -u -v github.com/mattn/go-colorable\n\tpip install Pygments\n\tgit submodule sync\n\tgit submodule update --init --recursive\n\n## local server\nserver:\n\thugo server --buildDrafts --watch\n\n## build\nbuild:\n\thugo -v\n\n## article ex: make article TITLE=\u0026#34;title\u0026#34;\narticle:\n\tgit checkout master\n\thugo new articles/`echo $(TITLE) | tr \u0026#39;[:upper:]\u0026#39; \u0026#39;[:lower:]\u0026#39; | sed -e \u0026#39;s/ /-/g\u0026#39;`.md\n\tmkdir -p content/articles/`date +\u0026#34;%Y\u0026#34;`/`date +\u0026#34;%m\u0026#34;`/`date +\u0026#34;%d\u0026#34;`/`echo $(TITLE) | tr \u0026#39;[:upper:]\u0026#39; \u0026#39;[:lower:]\u0026#39; | sed -e \u0026#39;s/ /-/g\u0026#39;`\n\tgit checkout -b article/`echo $(TITLE) | tr \u0026#39;[:upper:]\u0026#39; \u0026#39;[:lower:]\u0026#39; | sed -e \u0026#39;s/ /-/g\u0026#39;`\n\n## help\nhelp:\n\t@make2help $(MAKEFILE_LIST)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ccode\u003e$ make help\u003c/code\u003e を実行した場合, 次の内容が表示されます。\u003c/p\u003e","title":"IssueOverflow で記事を書く時に使ってる Makefile"},{"content":"年内に書いておきたいことの 1 つに「結婚を期に改姓すると不都合がないのか?」ということがあります。なぜかというと男性女性問わずよく聞かれるからです。年末もすでに大晦日を迎えてしまっていますが隙間時間を使ってパパっと書いておこうと思います。\n事務手続きまわりは朧気な記憶で書いているので書き忘れているものがあるかもしれません。ご注意ください。\n結論 そんなに影響ない 手続きは面倒くさい 困るのは本人よりも周りの人 ID つける時は気をつけましょう 前提 改姓以前の私のステータスは次の状態でした。\n個人事業主 青色申告してる 国保 契約書の名義はもちろん本人 次男 入籍を機に改姓することになった (婿) 改姓前にしたこと 取引先への連絡 次の内容を各社ご担当者様宛にお知らせしました。\n入籍すること 姓が変わること 入籍予定日前後は諸手続き含めてバタバタする可能性があること 改姓完了後は通知書を発行すること 取引先に対しての混乱を防ぐための事前連絡です。\n通知書については契約書の名義が旧姓のため, 改正後も有効な文書として明確化するための手続きです。自分が法務であれば欲しい文書ではあったので求められる前から用意しておきました。\n契約関係の調査時に名義が途切れて謎が増えるのは大変なのです。\n印鑑の作成 契約書用に使っていた印鑑一式はすべて旧姓のものになってしまうため新しい印鑑を発注しました。入籍して改姓した後にすぐに必要になるため早めに用意しておきました。\n入籍\u0026amp;改姓 婚姻届を提出するだけです。ただし私が国保だったので保険証の発行手続も必要でした。\n改姓後 手続きがたくさんあります。正直覚えていません。記憶にある限りで書き出してみます。\n銀行の口座名義変更 三菱東京 UFJ 銀行は群馬県に支店がないため大宮まで行く必要が 地銀はすぐそこに支店があって助かりました 個人事業用と個人用を含めるとかなり大変 クレジットカードの名義変更 携帯電話の名義変更 免許証の書き替え 実は入籍日を調整した結果, 名義書換ではなく免許更新で対応 税務署へ改姓の書類提出 取引先へ改姓した旨を書面で通知 この他にも個人事業で使用しているタイムズカーシェアの名義が云々などいくつかありましたが, 多すぎて覚えていません。\n改姓して困ったこと 手続き上の手間や変更当時の「誰だお前」のようなやりとりを除けば本人は特に困ったことはありませんでした。\nどちらかというと取引先各社の混乱が大変そうでした。旧姓でメールが来たり新姓旧姓混合で書類が作られるということがありました。この点に関しては申し訳なく思っています。\nまた, プライベートにおいては「とりあえずなんて呼べばいいの?」問題が起こったりもしていますが, 実際のところ適当に運用されています。\nID の問題 ID の取扱については失敗したと思っています。ID はプログラマであれば Twitter, Slack や GitHub で使用するアカウント ID のことです。\nこの ID は改姓後も引き続き yterjaima を利用しています。コミットログの前後関係が途切れてしまうためです。改姓の可能性が少しでもある人は少なくとも名字 (姓) を ID には含めないほうが良いですね。\n「自分は結婚しても名字変わることないし」と思っている男性プログラマの皆さん, 人生何が起こるかわからないんだぞ！\n","permalink":"https://issueoverflow.com/2016/12/31/impact-of-self-employed-programmers-family-name-change/","summary":"\u003cp\u003e年内に書いておきたいことの 1 つに「結婚を期に改姓すると不都合がないのか?」ということがあります。なぜかというと男性女性問わずよく聞かれるからです。年末もすでに大晦日を迎えてしまっていますが隙間時間を使ってパパっと書いておこうと思います。\u003c/p\u003e\n\u003cp\u003e事務手続きまわりは朧気な記憶で書いているので書き忘れているものがあるかもしれません。ご注意ください。\u003c/p\u003e\n\u003ch2 id=\"結論\"\u003e結論\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eそんなに影響ない\u003c/li\u003e\n\u003cli\u003e手続きは面倒くさい\u003c/li\u003e\n\u003cli\u003e困るのは本人よりも周りの人\u003c/li\u003e\n\u003cli\u003eID つける時は気をつけましょう\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"前提\"\u003e前提\u003c/h2\u003e\n\u003cp\u003e改姓以前の私のステータスは次の状態でした。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e個人事業主\n\u003cul\u003e\n\u003cli\u003e青色申告してる\u003c/li\u003e\n\u003cli\u003e国保\u003c/li\u003e\n\u003cli\u003e契約書の名義はもちろん本人\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e次男\u003c/li\u003e\n\u003cli\u003e入籍を機に改姓することになった (婿)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"改姓前にしたこと\"\u003e改姓前にしたこと\u003c/h2\u003e\n\u003ch3 id=\"取引先への連絡\"\u003e取引先への連絡\u003c/h3\u003e\n\u003cp\u003e次の内容を各社ご担当者様宛にお知らせしました。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e入籍すること\u003c/li\u003e\n\u003cli\u003e姓が変わること\u003c/li\u003e\n\u003cli\u003e入籍予定日前後は諸手続き含めてバタバタする可能性があること\u003c/li\u003e\n\u003cli\u003e改姓完了後は通知書を発行すること\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e取引先に対しての混乱を防ぐための事前連絡です。\u003c/p\u003e\n\u003cp\u003e通知書については契約書の名義が旧姓のため, 改正後も有効な文書として明確化するための手続きです。自分が法務であれば欲しい文書ではあったので求められる前から用意しておきました。\u003c/p\u003e\n\u003cp\u003e契約関係の調査時に名義が途切れて謎が増えるのは大変なのです。\u003c/p\u003e\n\u003ch3 id=\"印鑑の作成\"\u003e印鑑の作成\u003c/h3\u003e\n\u003cp\u003e契約書用に使っていた印鑑一式はすべて旧姓のものになってしまうため新しい印鑑を発注しました。入籍して改姓した後にすぐに必要になるため早めに用意しておきました。\u003c/p\u003e\n\u003ch2 id=\"入籍改姓\"\u003e入籍\u0026amp;改姓\u003c/h2\u003e\n\u003cp\u003e婚姻届を提出するだけです。ただし私が国保だったので保険証の発行手続も必要でした。\u003c/p\u003e\n\u003ch2 id=\"改姓後\"\u003e改姓後\u003c/h2\u003e\n\u003cp\u003e手続きがたくさんあります。正直覚えていません。記憶にある限りで書き出してみます。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e銀行の口座名義変更\n\u003cul\u003e\n\u003cli\u003e三菱東京 UFJ 銀行は群馬県に支店がないため大宮まで行く必要が\u003c/li\u003e\n\u003cli\u003e地銀はすぐそこに支店があって助かりました\u003c/li\u003e\n\u003cli\u003e個人事業用と個人用を含めるとかなり大変\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eクレジットカードの名義変更\u003c/li\u003e\n\u003cli\u003e携帯電話の名義変更\u003c/li\u003e\n\u003cli\u003e免許証の書き替え\n\u003cul\u003e\n\u003cli\u003e実は入籍日を調整した結果, 名義書換ではなく免許更新で対応\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e税務署へ改姓の書類提出\u003c/li\u003e\n\u003cli\u003e取引先へ改姓した旨を書面で通知\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eこの他にも個人事業で使用しているタイムズカーシェアの名義が云々などいくつかありましたが, 多すぎて覚えていません。\u003c/p\u003e\n\u003ch2 id=\"改姓して困ったこと\"\u003e改姓して困ったこと\u003c/h2\u003e\n\u003cp\u003e手続き上の手間や変更当時の「誰だお前」のようなやりとりを除けば本人は特に困ったことはありませんでした。\u003c/p\u003e\n\u003cp\u003eどちらかというと取引先各社の混乱が大変そうでした。旧姓でメールが来たり新姓旧姓混合で書類が作られるということがありました。この点に関しては申し訳なく思っています。\u003c/p\u003e\n\u003cp\u003eまた, プライベートにおいては「とりあえずなんて呼べばいいの?」問題が起こったりもしていますが, 実際のところ適当に運用されています。\u003c/p\u003e\n\u003ch2 id=\"id-の問題\"\u003eID の問題\u003c/h2\u003e\n\u003cp\u003eID の取扱については失敗したと思っています。ID はプログラマであれば Twitter, Slack や GitHub で使用するアカウント ID のことです。\u003c/p\u003e\n\u003cp\u003eこの ID は改姓後も引き続き \u003cem\u003eyterjaima\u003c/em\u003e を利用しています。コミットログの前後関係が途切れてしまうためです。改姓の可能性が少しでもある人は少なくとも名字 (姓) を ID には含めないほうが良いですね。\u003c/p\u003e","title":"自営業プログラマの姓が変わることによる影響"},{"content":"GitHub の private リポジトリで開発を進めている Golang プロジェクトがあります。CiecleCI 上でビルドを行ってバイナリファイルを GitHub Releases にアップロードしているものがあります。\nこれまでは「手動で最新版ファイルをダウンロードして ansible でデプロイする」といった方法を取っていました。都度行うには手間なので ansible の playbook 1 発で実行させたくなりました。\n実行したい処理 特定の GitHub Releases から最新版のファイルをダウンロード ansible 実行対象サーバのファイルと差し替え GitHub Releases の各バージョンには 1 ファイルのみ アップロードされている状態 準備 GitHub の API にアクセスする必要があるため Personal Access Token を取得します。管理画面 から新しいトークンの作成ができます。権限は 1 番上の repo にチェックを入れるだけです。\n取得したトークンを環境変数に設定します。(実際には direnv を使っています)\n$ export GITHUB_TOKEN=YOUR-GITHUB-TOKEN 参考 playbook - name: private な github releases からファイルをダウンロードする hosts: all vars: github: user: \u0026#39;USER-NAME\u0026#39; # 対象リポジトリのユーザ名 repos: \u0026#39;REPOSITORY-NAME\u0026#39; # 対象リポジトリ名 token: \u0026#34;{{ lookup(\u0026#39;env\u0026#39;, \u0026#39;GITHUB_TOKEN\u0026#39;) }}\u0026#34; # 環境変数 GITHUB_TOKEN をロード dest: \u0026#39;/path/to/savepath\u0026#39; # DL したファイルの保存先パス tasks: - name: \u0026#39;{{ github.user }}/{{ github.repos }} 最新版情報取得\u0026#39; uri: url: \u0026#39;https://api.github.com/repos/{{ github.user }}/{{ github.repos }}/releases/latest\u0026#39; HEADER_Authorization: \u0026#39;token {{ github.token }}\u0026#39; return_content: yes body_format: json register: response # 最新版の情報を取得 - name: GitHub API からダウンロード用 URL 取得 uri: url: \u0026#39;{{ response.json.assets[0].url }}\u0026#39; HEADER_Authorization: \u0026#39;token {{ github.token }}\u0026#39; HEADER_Accept: \u0026#39;application/octet-stream\u0026#39; follow_redirects: no return_content: yes body_format: json status_code: 302 register: response # DL 対象ファイルの URL を取得 - name: \u0026#39;{{ github.user }}/{{ github.repos }} からファイルをダウンロード\u0026#39; get_url: url: \u0026#39;{{ response.location }}\u0026#39; dest: \u0026#39;{{ github.dest }}\u0026#39; force: yes owner: root group: root mode: 0500 become: True 処理手順 uri モジュールを使って最新版リリース情報を取得 レスポンス: Get the latest release 取得したいファイルは 1 つだけなので, assets の 0 番の URL が処理対象 uri モジュールで 1 で取得した JSON を使って DL 対象の URL にアクセス レスポンス: Get a single release asset status: 302 が返り, レスポンスヘッダの Location に DL 用 URL が書かれている 2 のレスポンスヘッダ Location に記載されている URL にアクセスしファイル取得 本来なら 1 のデータ取得後に get_url モジュールで 2 へアクセスすればファイルが落とせそうな気がします。しかし get_url が HTTP Status: 302 Found のリダイレクトにエラーを吐くので, 直接レスポンスの Location を見て DL しています。\ncurl であれば 1 で取得した response.json.assets[0].url に対して次のコマンドでファイルを DL できます。\n$ curl -L -H \u0026#34;Authorization: token $GITHUB_TOKEN\u0026#34; -H \u0026#34;Accept: application/octet-stream\u0026#34; https://api.github.com/repos/USER-NAME/REPOSITORY-NAME/releases/assets/:asset_id command モジュールで curl を使ったほうが早い気もしますが, 折角 ansible を使ているので playbook で頑張りました。\nget_url モジュールの取扱間違いの可能性 もしかすると get_url の扱いを間違えている結果, 余計な処理を間に挟まなければならないのかもしれません。一応ドキュメントは読んでいますが, お気づきの点がある方はひっそり Twitter あたりで教えて欲しいください。\n","permalink":"https://issueoverflow.com/2016/12/01/how-to-download-file-from-private-github-releases-with-ansible/","summary":"\u003cp\u003eGitHub の private リポジトリで開発を進めている Golang プロジェクトがあります。CiecleCI 上でビルドを行ってバイナリファイルを \u003ca href=\"https://github.com/blog/1547-release-your-software\"\u003eGitHub Releases\u003c/a\u003e にアップロードしているものがあります。\u003c/p\u003e\n\u003cp\u003eこれまでは「手動で最新版ファイルをダウンロードして ansible でデプロイする」といった方法を取っていました。都度行うには手間なので ansible の playbook 1 発で実行させたくなりました。\u003c/p\u003e\n\u003ch2 id=\"実行したい処理\"\u003e実行したい処理\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e特定の GitHub Releases から最新版のファイルをダウンロード\u003c/li\u003e\n\u003cli\u003eansible 実行対象サーバのファイルと差し替え\u003c/li\u003e\n\u003cli\u003eGitHub Releases の各バージョンには \u003cem\u003e1 ファイルのみ\u003c/em\u003e アップロードされている状態\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"準備\"\u003e準備\u003c/h2\u003e\n\u003cp\u003eGitHub の API にアクセスする必要があるため Personal Access Token を取得します。\u003ca href=\"https://github.com/settings/tokens/new\"\u003e管理画面\u003c/a\u003e から新しいトークンの作成ができます。権限は 1 番上の \u003cstrong\u003erepo\u003c/strong\u003e にチェックを入れるだけです。\u003c/p\u003e\n\u003cpicture\u003e\n            \u003csource\n                srcset=\"/2016/12/01/how-to-download-file-from-private-github-releases-with-ansible/token-setting_hu_706f25c28cb9720b.webp 480w, /2016/12/01/how-to-download-file-from-private-github-releases-with-ansible/token-setting_hu_266fe9bd573683ec.webp 600w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\n                type=\"image/webp\"\u003e\n            \u003cimg\n                src=\"/2016/12/01/how-to-download-file-from-private-github-releases-with-ansible/token-setting.png\"\n                alt=\"Personal Access Token の権限設定\"\n                width=\"600\"\n                height=\"195\"\n                loading=\"lazy\"\n                decoding=\"async\"\n                srcset=\"/2016/12/01/how-to-download-file-from-private-github-releases-with-ansible/token-setting_hu_c3cc0ab5a046feed.png 480w, /2016/12/01/how-to-download-file-from-private-github-releases-with-ansible/token-setting.png 600w\"\n                sizes=\"(max-width: 1200px) 100vw, 1200px\"\u003e\n        \u003c/picture\u003e\n\u003cp\u003e取得したトークンを環境変数に設定します。(実際には \u003ca href=\"https://github.com/direnv/direnv\"\u003edirenv\u003c/a\u003e を使っています)\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ export GITHUB_TOKEN\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eYOUR-GITHUB-TOKEN\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"参考-playbook\"\u003e参考 playbook\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- \u003cspan style=\"color:#f92672\"\u003ename\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003eprivate な github releases からファイルをダウンロードする\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003ehosts\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003eall\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003evars\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003egithub\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003euser\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;USER-NAME\u0026#39;\u003c/span\u003e        \u003cspan style=\"color:#75715e\"\u003e# 対象リポジトリのユーザ名\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003erepos\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;REPOSITORY-NAME\u0026#39;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 対象リポジトリ名\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003etoken\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;{{ lookup(\u0026#39;env\u0026#39;, \u0026#39;GITHUB_TOKEN\u0026#39;) }}\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 環境変数 GITHUB_TOKEN をロード\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003edest\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;/path/to/savepath\u0026#39;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# DL したファイルの保存先パス\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#f92672\"\u003etasks\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    - \u003cspan style=\"color:#f92672\"\u003ename\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;{{ github.user }}/{{ github.repos }} 最新版情報取得\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003euri\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003eurl\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;https://api.github.com/repos/{{ github.user }}/{{ github.repos }}/releases/latest\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003eHEADER_Authorization\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;token {{ github.token }}\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003ereturn_content\u003c/span\u003e: \u003cspan style=\"color:#66d9ef\"\u003eyes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003ebody_format\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003ejson\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eregister\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003eresponse\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# 最新版の情報を取得\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    - \u003cspan style=\"color:#f92672\"\u003ename\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003eGitHub API からダウンロード用 URL 取得\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003euri\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003eurl\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;{{ response.json.assets[0].url }}\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003eHEADER_Authorization\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;token {{ github.token }}\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003eHEADER_Accept\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;application/octet-stream\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003efollow_redirects\u003c/span\u003e: \u003cspan style=\"color:#66d9ef\"\u003eno\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003ereturn_content\u003c/span\u003e: \u003cspan style=\"color:#66d9ef\"\u003eyes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003ebody_format\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003ejson\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003estatus_code\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e302\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eregister\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003eresponse\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# DL 対象ファイルの URL を取得\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    - \u003cspan style=\"color:#f92672\"\u003ename\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;{{ github.user }}/{{ github.repos }} からファイルをダウンロード\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003eget_url\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003eurl\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;{{ response.location }}\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003edest\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;{{ github.dest }}\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003eforce\u003c/span\u003e: \u003cspan style=\"color:#66d9ef\"\u003eyes\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003eowner\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003eroot\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003egroup\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003eroot\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#f92672\"\u003emode\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e0500\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003ebecome\u003c/span\u003e: \u003cspan style=\"color:#66d9ef\"\u003eTrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"処理手順\"\u003e処理手順\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003euri モジュールを使って最新版リリース情報を取得\n\u003cul\u003e\n\u003cli\u003eレスポンス: \u003ca href=\"https://developer.github.com/v3/repos/releases/#get-the-latest-release\"\u003eGet the latest release\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e取得したいファイルは 1 つだけなので, assets の 0 番の URL が処理対象\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003euri モジュールで 1 で取得した JSON を使って DL 対象の URL にアクセス\n\u003cul\u003e\n\u003cli\u003eレスポンス: \u003ca href=\"https://developer.github.com/v3/repos/releases/#get-a-single-release-asset\"\u003eGet a single release asset\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estatus: 302 が返り, レスポンスヘッダの Location に DL 用 URL が書かれている\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e2 のレスポンスヘッダ Location に記載されている URL にアクセスしファイル取得\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e本来なら 1 のデータ取得後に \u003ccode\u003eget_url\u003c/code\u003e モジュールで 2 へアクセスすればファイルが落とせそうな気がします。しかし \u003ccode\u003eget_url\u003c/code\u003e が HTTP Status: 302 Found のリダイレクトにエラーを吐くので, 直接レスポンスの Location を見て DL しています。\u003c/p\u003e","title":"ansible で private な GitHub Releases からファイルをダウンロードする方法"},{"content":"Middleman で Web サイトを作る場合, sitemap.xml の lastmod はビルドされ出力される時刻に統一されてしまいます。\nsitemap.xml の仕様を考えると可能な限り lastmod は正しい時刻が望ましいです。現在開発中サービスの都合もあり「どうすれば正確な時刻を出力できるか?」と思い悩んでしばらく時間が経ってしまいました。\nTwitter で rubygems middleman で検索して眺めていたところ, この問題を解決してくれそうな拡張機能がひっそりリリースされていることに気づきました。\nmiddleman-vcs-time | RubyGems.org\nmiddleman-vcs-time 概要 README によると,\nProvides means to look up the last-modified times of Middleman sitemap resources according to version control. Supports Git with a fallback to filesystem metadata.\nREADME.md: https://github.com/AndrewKvalheim/middleman-vcs-time/blob/master/README.md\nとのことで, VCS (Git など) の最終変更時刻をベースに Middleman の sitemap リソースを書き替えてくれるようです。現状では Git をサポートし, フォールバックとしてファイルのメタデータを参照します。とのことで。\nsitemap リソースについて sitemap リソースはドキュメントでいうと サイトマップ のことです。\nMiddleman は Web サイトデータを出力する前にビルド対象のファイルを収集し, sitemap リソースというデータを用意してからファイル出力を行います。この sitemap リソースは各ページのタイトル, 元ファイルパス, 出力先ファイルパスやら何やらのデータを持っています。この sitemap まわりは拡張機能の開発や凝ったサイト構成にならないと関わらない部分なので難しいです。\nこの sitemap リソースのうち各ページの更新時刻を VCS ベースに差し替えてくれます。テンプレート側ではこの時刻を使って更新日時を出力することが可能になります。\nsitemap.xml でのサンプル サンプルとして 株式会社フィルイン の sitemap.xml.builder を挙げます。\npriority の取り扱いなど関係ない処理も混ざっているので簡易版として次のコードを参考にしてみてください。\nsite_url = \u0026#34;https://www.fillin-inc.com\u0026#34; xml.instruct! xml.urlset \u0026#39;xmlns\u0026#39; =\u0026gt; \u0026#34;http://www.sitemaps.org/schemas/sitemap/0.9\u0026#34; do sitemap.resources.select { |page| page.destination_path =~ /\\.html/ }.each do |page| xml.url do xml.loc URI.escape(File.join(site_url, page.destination_path)) # page.mtime で差し替えられた時刻を取得 xml.lastmod page.mtime.iso8601 xml.changefreq \u0026#34;weekly\u0026#34; xml.priority \u0026#34;0.5\u0026#34; end end end 出力されたコードは https://www.fillin-inc.com/sitemap.xml で確認できます。lastmod の時刻がそれぞれバラバラになっているのが確認できます。\n","permalink":"https://issueoverflow.com/2016/11/29/output-accurate-sitemapxml-with-middleman-vcs-time/","summary":"\u003cp\u003eMiddleman で Web サイトを作る場合, sitemap.xml の lastmod はビルドされ出力される時刻に統一されてしまいます。\u003c/p\u003e\n\u003cp\u003esitemap.xml の仕様を考えると可能な限り lastmod は正しい時刻が望ましいです。現在開発中サービスの都合もあり「どうすれば正確な時刻を出力できるか?」と思い悩んでしばらく時間が経ってしまいました。\u003c/p\u003e\n\u003cp\u003eTwitter で \u003ca href=\"https://twitter.com/search?q=rubygems%20middleman\"\u003erubygems middleman\u003c/a\u003e で検索して眺めていたところ, この問題を解決してくれそうな拡張機能がひっそりリリースされていることに気づきました。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://rubygems.org/gems/middleman-vcs-time\"\u003emiddleman-vcs-time | RubyGems.org\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"middleman-vcs-time-概要\"\u003emiddleman-vcs-time 概要\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/AndrewKvalheim/middleman-vcs-time/blob/master/README.md\"\u003eREADME\u003c/a\u003e によると,\u003c/p\u003e\n\u003cblockquote\u003e\u003cp\u003eProvides means to look up the last-modified times of Middleman sitemap resources according to version control.\nSupports Git with a fallback to filesystem metadata.\u003c/p\u003e\n\u003cp\u003eREADME.md: \u003ca href=\"https://github.com/AndrewKvalheim/middleman-vcs-time/blob/master/README.md\"\u003ehttps://github.com/AndrewKvalheim/middleman-vcs-time/blob/master/README.md\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\u003cp\u003eとのことで, VCS (Git など) の最終変更時刻をベースに Middleman の sitemap リソースを書き替えてくれるようです。現状では Git をサポートし, フォールバックとしてファイルのメタデータを参照します。とのことで。\u003c/p\u003e\n\u003ch2 id=\"sitemap-リソースについて\"\u003esitemap リソースについて\u003c/h2\u003e\n\u003cp\u003esitemap リソースはドキュメントでいうと \u003ca href=\"https://middlemanapp.com/jp/advanced/sitemap/\"\u003eサイトマップ\u003c/a\u003e のことです。\u003c/p\u003e\n\u003cp\u003eMiddleman は Web サイトデータを出力する前にビルド対象のファイルを収集し, sitemap リソースというデータを用意してからファイル出力を行います。この sitemap リソースは各ページのタイトル, 元ファイルパス, 出力先ファイルパスやら何やらのデータを持っています。この sitemap まわりは拡張機能の開発や凝ったサイト構成にならないと関わらない部分なので難しいです。\u003c/p\u003e","title":"middleman-vcs-time で正確な sitemap.xml を出力する"},{"content":"過去に e2esound.com 業務日誌 や 技術ブログ | e2esound.com を書いてきました。諸事情重なった上に検討したところ「事業とは別でブログを用意しておいた方が良さそう」という結論に至ったので新しいブログを始めました。\nこのブログの開始に伴って 2 つのブログは更新を停止しています。\nこのサイトの技術構成 今のところではありますが, 現状では次の構成です。\nGolang 製静的サイトジェネレータ Hugo デザインは hugo-zen をベースに syntax highlight を Pygments ベースに変更 リポジトリ github の private repos デプロイ CircleCI で github の master ブランチを awscli で処理 サーバ AWS S3 AWS CloudFront AWS CertificateManager AWS Route53 最近増えているらしい静的サイトベースのブログサイトで, とりあえず一通り自動化してる。といった構成になっています。\nなぜ Hugo なのか いつもであれば静的サイトジェネレータには Middleman を採用していますが, 今回は Go 言語ベースの Hugo にしました。\nHugo は Golang ベースで作られているため Win, Mac 環境問わず動作し, 尚且つ処理が高速らしい噂を耳にして Middleman のユーザとしては気になる存在でした。\n今回は私個人のブログサイトなので更新時に一緒に作業する人の学習コストを無視でき, このところ Go 言語を書いている都合 Go のプロダクトをいじっておきたいという気持ちもありました。\n(Middleman を使えば学習コストが低いなんでことは一切ないです)\nMiddleman と比較して Hugo の使用感 作成されたテーマベースでカスタマイズした程度の使用感ですが, いくつか感じたことがあります。\nテーマ機能 Hugo は既存のテーマを読み込みつつ, 必要箇所はファイルごとに 置き換え ることができます。テーマを元にカスタマイズすれば Web サイトができあがります。\nMiddleman にも プロジェクトテンプレート がありますが, これは初期化時にファイルを用意するだけの機能です。必要に応じて用意されたテンプレートファイルに手を入れ編集しビルドします。\nこの違いによって Hugo の方がより CMS っぽいテンプレート機能を備えているんだと感じました。\nプログラマっぽい作り 設定ファイルの扱い方や構成が Middleman に比べてプログラマ寄りな傾向がある気がします。コードが書ける人が近くにいない場合 Web デザイナさんには難しそうだなと感じました。\n(Middleman も難しいけどな)\n地味なところで Go 言語の時刻フォーマットを採用しているので, 初見で Golang を書いたことがない人は少し混乱しそうです。\nこれから何を書くのか 学習していること 会社関連のこと 作っているもののこと どうでもいい話 あたりを予定しています。まぁ気長にダラダラと新しいブログを楽しみたい。\n","permalink":"https://issueoverflow.com/2016/11/22/started-blog-with-hugo/","summary":"\u003cp\u003e過去に \u003ca href=\"http://blogged.e2esound.com/\"\u003ee2esound.com 業務日誌\u003c/a\u003e や \u003ca href=\"http://www.e2esound.com/tech/\"\u003e技術ブログ | e2esound.com\u003c/a\u003e を書いてきました。諸事情重なった上に検討したところ「事業とは別でブログを用意しておいた方が良さそう」という結論に至ったので新しいブログを始めました。\u003c/p\u003e\n\u003cp\u003eこのブログの開始に伴って 2 つのブログは更新を停止しています。\u003c/p\u003e\n\u003ch2 id=\"このサイトの技術構成\"\u003eこのサイトの技術構成\u003c/h2\u003e\n\u003cp\u003e今のところではありますが, 現状では次の構成です。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eGolang 製静的サイトジェネレータ \u003ca href=\"https://gohugo.io/\"\u003eHugo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eデザインは \u003ca href=\"https://github.com/rakuishi/hugo-zen\"\u003ehugo-zen\u003c/a\u003e をベースに\n\u003cul\u003e\n\u003cli\u003esyntax highlight を Pygments ベースに変更\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eリポジトリ\n\u003cul\u003e\n\u003cli\u003egithub の private repos\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eデプロイ\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://circleci.com/\"\u003eCircleCI\u003c/a\u003e で github の master ブランチを \u003ca href=\"https://aws.amazon.com/jp/cli/\"\u003eawscli\u003c/a\u003e で処理\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eサーバ\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://aws.amazon.com/jp/s3/\"\u003eAWS S3\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://aws.amazon.com/jp/cloudfront/\"\u003eAWS CloudFront\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://aws.amazon.com/jp/certificate-manager/\"\u003eAWS CertificateManager\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://aws.amazon.com/jp/route53/\"\u003eAWS Route53\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e最近増えているらしい静的サイトベースのブログサイトで, とりあえず一通り自動化してる。といった構成になっています。\u003c/p\u003e\n\u003ch2 id=\"なぜ-hugo-なのか\"\u003eなぜ Hugo なのか\u003c/h2\u003e\n\u003cp\u003eいつもであれば静的サイトジェネレータには \u003ca href=\"https://middlemanapp.com/jp/\"\u003eMiddleman\u003c/a\u003e を採用していますが, 今回は Go 言語ベースの Hugo にしました。\u003c/p\u003e\n\u003cp\u003eHugo は Golang ベースで作られているため Win, Mac 環境問わず動作し, 尚且つ処理が高速らしい噂を耳にして Middleman のユーザとしては気になる存在でした。\u003c/p\u003e\n\u003cp\u003e今回は私個人のブログサイトなので更新時に一緒に作業する人の学習コストを無視でき, このところ Go 言語を書いている都合 Go のプロダクトをいじっておきたいという気持ちもありました。\u003c/p\u003e","title":"Hugo でブログ始めました"},{"content":" 氏名: 松島 祐也 ID: yterajima / yuya-matsushima 株式会社フィルイン 代表取締役 / プログラマ 群馬県高崎市在住 いまやっていること 群馬県を中心とした中小企業向けに, 業務改善・システム開発・DX 支援 業務を少しずつ置き換えていく「漸進型 DX」 受託開発 開発支援 生成 AI を業務に定着させる取り組み 営業活動向けの Agent Skills「Sales Skills」を開発・販売 使用言語 Ruby Go JavaScript TypeScript 経歴 2009-04: 東京都三鷹市にて Web 制作・Web システム開発の個人事業を開業 2011-09: 地元群馬県に U ターン 2015-12: 事業拠点を高崎市に移転 2016-03: 結婚により松島に改姓 2016-09: 株式会社フィルイン創業 2017-05: サイト内検索サービス LazySearch β リリース(現在は終了) 2026-04: 漸進型 DX 提供開始 2026-10: Sales Skills 販売開始 関連リンク 株式会社フィルイン GitHub Bluesky ","permalink":"https://issueoverflow.com/profile/","summary":"\u003cimg src=\"/images/profile-yuya-matsushima.png\" width=\"200\" height=\"200\" alt=\"松島祐也\"\u003e\n\u003cul\u003e\n\u003cli\u003e氏名: 松島 祐也\u003c/li\u003e\n\u003cli\u003eID: yterajima / yuya-matsushima\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://fillin-inc.com\"\u003e株式会社フィルイン\u003c/a\u003e 代表取締役 / プログラマ\u003c/li\u003e\n\u003cli\u003e群馬県高崎市在住\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"いまやっていること\"\u003eいまやっていること\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e群馬県を中心とした中小企業向けに, 業務改善・システム開発・DX 支援\n\u003cul\u003e\n\u003cli\u003e業務を少しずつ置き換えていく「\u003ca href=\"https://lp.fillin-inc.com/progressive-dx/\"\u003e漸進型 DX\u003c/a\u003e」\u003c/li\u003e\n\u003cli\u003e受託開発\u003c/li\u003e\n\u003cli\u003e開発支援\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e生成 AI を業務に定着させる取り組み\n\u003cul\u003e\n\u003cli\u003e営業活動向けの Agent Skills「\u003ca href=\"https://fillin-inc.com/services/sales-skills/\"\u003eSales Skills\u003c/a\u003e」を開発・販売\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e使用言語\n\u003cul\u003e\n\u003cli\u003eRuby\u003c/li\u003e\n\u003cli\u003eGo\u003c/li\u003e\n\u003cli\u003eJavaScript\u003c/li\u003e\n\u003cli\u003eTypeScript\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"経歴\"\u003e経歴\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e2009-04: 東京都三鷹市にて Web 制作・Web システム開発の個人事業を開業\u003c/li\u003e\n\u003cli\u003e2011-09: 地元群馬県に U ターン\u003c/li\u003e\n\u003cli\u003e2015-12: 事業拠点を高崎市に移転\u003c/li\u003e\n\u003cli\u003e2016-03: 結婚により松島に改姓\u003c/li\u003e\n\u003cli\u003e2016-09: 株式会社フィルイン創業\u003c/li\u003e\n\u003cli\u003e2017-05: サイト内検索サービス LazySearch β リリース(現在は終了)\u003c/li\u003e\n\u003cli\u003e2026-04: \u003ca href=\"https://lp.fillin-inc.com/progressive-dx/\"\u003e漸進型 DX\u003c/a\u003e 提供開始\u003c/li\u003e\n\u003cli\u003e2026-10: \u003ca href=\"https://fillin-inc.com/services/sales-skills/\"\u003eSales Skills\u003c/a\u003e 販売開始\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"関連リンク\"\u003e関連リンク\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://fillin-inc.com\"\u003e株式会社フィルイン\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yuya-matsushima\"\u003eGitHub\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://bsky.app/profile/ymatsushima.bsky.social\"\u003eBluesky\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e","title":"プロフィール"}]