Hugoテーマの学習

ここではhugoのテーマの一つ一つがどう動いているのか?確認していきたいと思います。

Dec 18, 2025
技術関連

画像や音声処理にffmpegがかなり便利なのでまとめ

ffmpegは動画から音声だけを取り出す だけでなく、svgファイルをpngに変換もできます

Dec 13, 2025
技術関連

エンジニアのためのデザイン学習

いろんな可能性を見出して機能を追加して、詳細まで分かりやすく… するととんでもなく使えない画面デザインが完成するという悲劇。 使われないシステムはこうして作られる…

Dec 3, 2025
技術関連

Wordpressからhugoへ

長い間、wordpressを用いてブログを運用していました。といっても思いつきで書いて、しばらく放置を繰り返しておりました。 しかしセキュリティの脆弱性が見つかったり、そもそも管理画面の乗っ取りなど不安を感じておりました。

今回、思い立ったようにhugoという仕組みに乗り換えてみました。 エンジニアな人でないとちょっと扱いが難しいかもしれません。

自分のパソコンで記事を作成、コミット、プッシュすると自動的にサイトも更新されるという仕組みです。 静的ページなので表示も早く、しかも安全です。

Nov 27, 2025
技術関連
Wordpressからhugoへ

なぜ今pnpmなのか? 主要パッケージマネージャー徹底比較で見えた、その圧倒的実力

Web開発の世界では、npmYarnが長らくパッケージマネージャーのデファクトスタンダードとして君臨してきました。しかし近年、「第3の選択肢」としてpnpmが急速に存在感を増しています。

また新しいツールか…」と感じるかもしれません。しかし、pnpmは単なる代替品ではなく、node_modulesが抱える根本的な問題にアプローチし、ディスク効率インストール速度依存関係の堅牢性において、他のツールを凌駕する可能性を秘めています。

この記事では、pnpmがなぜこれほどまでに注目されているのか、その核心的な仕組みから、npm、Yarn、そして超新星Bunとの比較まで、約2000字で徹底的に解説します。あなたの開発体験を次のレベルへ引き上げるヒントが、きっとここにあるはずです。

pnpmの核心:効率性を生む「コンテンツアドレス可能ストア」

pnpmの魔法の根源は、そのユニークなnode_modulesの管理方法にあります。npmやYarn Classicがプロジェクトごとにパッケージのコピーを作成するのに対し、pnpmは全く異なるアプローチを取ります。

  1. グローバルストアへの一元管理 : pnpmは、インストールした全てのパッケージを、コンピュータ上の単一の場所(コンテンツアドレス可能ストア)に保存します。パッケージの内容に基づいて一意なハッシュが生成され、そのハッシュをキーとして保存されます。これにより、同じバージョンのパッケージは、PC上にただ一つしか存在しない状態が実現します。
  2. シンボリックリンクによる参照 : プロジェクトでパッケージをインストールすると、pnpmはグローバルストアから実際のファイルをコピーするのではなく、そこへのシンボリックリンク(またはハードリンク)をnode_modules内に作成します。

この仕組みにより、pnpmは他のパッケージマネージャーにはない、3つの大きなメリットを提供します。

🚀 メリット1:驚異的なディスクスペース効率

複数のプロジェクトで同じバージョンのReactやLodashを使っていても、ディスク上に物理的に存在するファイルは1つだけです。プロジェクトが増えれば増えるほど、その節約効果は絶大になります。ローカル環境のストレージを圧迫しがちなnode_modules問題から、私たちを解放してくれます。

⚡ メリット2:超高速なインストール

2回目以降のインストールでは、pnpmはグローバルストアに必要なパッケージが既に存在するかをチェックします。もし存在すれば、ネットワークからダウンロードする必要はなく、ディスク上のリンクを作成するだけで済みます。これにより、特にキャッシュが効いている状態でのインストールは、npmやYarnを大幅に上回る速度を発揮します。

🛡️ メリット3:厳格で信頼性の高い依存関係

npmやYarnは、依存関係を「フラット化」してnode_modulesのトップレベルに配置します。これにより、package.jsonに直接記述していないパッケージ(依存関係の依存関係、いわゆる孫パッケージ)にもコードからアクセスできてしまう「幽霊依存(Phantom Dependencies)」という問題が発生します。

これは、意図しないライブラリへの依存を生み、依存関係を更新した際に予期せぬエラーを引き起こす原因となります。

pnpmのnode_modules構造はフラットではなく、package.jsonで宣言されたパッケージへのシンボリックリンクのみが直下に配置されます。これにより、幽霊依存が構造的に発生しなくなり、プロジェクトの信頼性と堅牢性が大幅に向上します。

主要パッケージマネージャーとの徹底比較

pnpmの良さをより深く理解するために、他の主要なツールと比較してみましょう。

機能/特徴 pnpm npm Yarn (Berry v4+) Bun
インストール速度 速い 普通 速い (PnP) 最速
ディスク効率 非常に良い 普通 良い (Zero-Installs) 良い
メモリ効率 良い 低い(失敗リスク有) 良い 非常に良い
依存関係の厳格さ 非常に厳格 緩い 厳格 (PnP) npm互換
node_modules シンボリックリンク フラット 無し (PnP) npm互換
安定性/実績 高い 非常に高い 高い 発展途上
モノレポ対応 強力 対応 強力 対応
互換性 高い 非常に高い PnP利用時に注意 発展途上

vs npm

npm はNode.jsの公式パッケージマネージャーであり、そのエコシステムと安定性は他の追随を許しません。しかし、pnpmと比較すると、ディスク効率とインストール速度、そして依存関係の厳格さで見劣りします。特に幽霊依存の問題は、npmが抱える構造的な課題です。pnpmは、npmの使い慣れたコマンド体系(pnpm installnpm install と同じように機能します)を維持しつつ、これらの問題をアーキテクチャレベルで解決しています。

Nov 17, 2025
技術関連
なぜ今pnpmなのか? 主要パッケージマネージャー徹底比較で見えた、その圧倒的実力

新しいPCをローカルアカウントでセットアップする方法

ローカルアカウントを作成する

Windows11において初期アカウント作成の際にマイクロソフトアカウントの作成を求められます。
これを回避してローカルアカウントを作成する方法を記載いたします。

手順

  1. OS初期起動のユーザー作成時にインターネットを切断しておきます。
  2. Shift+F10を押してコマンドプロントを開きます。(Fnキーを同時に押す必要がある場合があります。DELLやHPのマシンの場合等)
  3. コマンドプロントにcd oobeと入れてエンターキーを押します。
  4. 続けてコマンドプロントにBypassNRO.cmdと入れてエンターキーを押します。
  5. これで再起動されるので、引き続きユーザー設定を進めていく。
  6. インターネット接続を要求される時があるので、その時にインターネット回線を切断します。
  7. その後 インターネットに接続していません を選択します
  8. さらに 制限された環境で設定する を選択します

するとローカルアカウントに必要な情報(ユーザー名、パスワード等)を求められるので入力します。
これでローカルアカウントを作成することができます。

設定続き

  1. ローカルユーザー、パスワードを設定します
  2. 秘密の質問の答えを設定します
  3. プリファレンスの設定(名前やメール)は空欄のまま、次へをクリック
  4. McAfeeのサービスには登録し…のチェックを外します

以上でOSの初期設定完了です

セットアップ

  1. McAfee削除 設定⇒アプリから削除します
  2. OneDrive削除 設定⇒アプリから削除します
  3. メーカー固有のアップデートの仕組みを設定(後述)

利用者としてのセットアップ

https://learn.microsoft.com/ja-jp/windows/package-manager/winget/
から“`アプリ インストーラーは Microsoft Store から取得“` をクリックします

※これをやらないとwingetが使えません

管理者モードでwindows terminalを開きます

winget install google.chrome
winget install google.japaneseime
winget install neovim.neovim
winget install microsoft.visualstudiocode
winget install sharex.sharex
winget install acrobatreader
winget install google.googledrive

wsl --install
wsl --set-default-version 2
wsl --install -d Ubuntu

Mar 5, 2024
技術関連

Zoomで複数人が画面共有できず焦った内容

先日、当然のように以下のように、複数の参加者が同時に共有可能にしておいて、次の方にスタンバイしておいてもらおうと思ったら、このオプションが表示されずに、「えーっとえーっと」と結局結論だせず、探しまくったのでメモしておきます。

Feb 16, 2022
ライフハック

Google Drive上のドキュメントへのリンク記載方法

普段、Google Driveを利用してファイル共有することも多々ありますが、ZIP形式のファイルのリンクを送るとZIPの中身が見えたりして、ちょっと扱いに苦労します。このときに、そのままのリンクを送ってGoogle Driveで開くのではなくて、ダウンロードさせたり、またはコピーとして開くようにしてあげたり、実はいろいろとできます。という話。

通常の共有。リンクを作成して共有する

【スプレッドシート】 https://docs.google.com/spreadsheets/d/(xxx)/edit?usp=sharing

【ドキュメント】 https://docs.google.com/document/d/(xxxxxxxxxxxxxx)/edit?usp=sharing

【スライド】 https://docs.google.com/presentation/d/(xxxxxxxxxxxxxx)/edit?usp=sharing

【PDFなど】 https://drive.google.com/file/d/(xxxxxxxxxxxxxx)/view?usp=sharing

コピーを渡すには

URL末尾の「/edit」を削除し「/copy?copyComments=true」にするとコメントを含めてそのドキュメントのコピーを渡すことが可能

コメントはコピーしない

URL末尾の「/edit」を削除し「includeResolvedCommentsOnCopy=false」にすると、解決済みのコメントがコピーされずに、そのドキュメントのコピーを渡すことが可能

プレビューモード

URL末尾の「/edit」を削除し「/preview」にすると、プレビューモードで共有が可能。メニューが表示されません。これは特にドキュメントやPDFを共有する場合に重宝しそうです

新規作成できるようにする

URL末尾の「/edit」を削除し「/template/preview」にすると、この文書を元に新規作成ができるようになります

ダウンロードできるように

URL末尾の「/edit」を削除し「/export?format=pdf」にすると、PDFとしてダンロード可能な共有となります。Googleドキュメントとスプレッドシートで確認済み

ワード文書としてダウンロード

URL末尾の「/edit」を削除し「export?format=word」とするとワード文書としてダウンロード可能な共有となります。Googleドキュメントで確認済み

CSVとしてダウンロード

URL末尾の「/edit」を削除し「/export?format=csv」にすると、CSVとして共有可能となります

Excelとしてダウンロード

URL末尾の「/edit」を削除し「/export」に置き換えると、GoogleスプレッドシートをExcelにしてダウンロードしてもらうリンクになります

PDFとしてダウンロード

URL末尾の「/edit」を削除し「/export/pdf」に置き換えるとGoogleスライドをPDFとしてダウンロードしてもらうリンクとなります

その他のファイルのダウンロード

https://drive.google.com/file/d/(xxxxxxxxxxxxxx)/view?usp=sharing

これを https://drive.google.com/uc?export=download&id=(xxxxxxxxxxxxxx)

さらに、WEBで閲覧するためなら、
http://drive.google.com/uc?export=view&id=(xxxxxxxxxxxxxx)

Dec 13, 2021
ライフハック

CakePHP4の日付フォーマット

i18nFormatを使って表現します

Nov 27, 2021
ライフハック

nvm(Node Version Manager)を使う

atcoder-cliを使いたくて、少々回り道をしながらもインストール手順を残しておきます

homebrewを使ってgccをインストールします

$ brew install gcc
$ ln -s /usr/local/bin/gcc-11 /usr/local/bin/gcc
$ ln -s /usr/local/bin/g++-11 /usr/local/bin/g++
$ gcc -v
$ g++ -v</code></pre>

上記は、2021年9月時点での情報です。バージョンがどんどんと上がるはずですので、
ls /usr/loca/bin/ | grep gcc
などとして正確なバージョンを把握して下さい

また、gcc -vとしたときに、apple clangが呼ばれていたらシンボリックリンクがうまくいっていないか、優先順位がうまくいっていない可能性があるため、以下をやってみます

$ echo 'export PATH=$PATH:/usr/local/bin' >> ~/.zshrc

続いて、python, nvmをインストール

$ brew install python3
$ brew install nvm
$ source $(brew --prefix nvm)/nvm.sh
$ echo 'source $(brew --prefix nvm)/nvm.sh' >> ~/.zshrc
$ nvm -v

バージョンが表示されればOKです。

Sep 19, 2021
ライフハック

「言葉にできるは武器になる」株式会社電通 梅田悟司著 日本経済新聞社刊を読んだ

日頃、頭だけで考えて、パンクすること多々ある中、この本は理論と具体例で非常に有益でした。今日から使えるノウハウ満載です。

Jan 2, 2021
読んだ本

グーグルドライブでパスを追加する方法

日頃グーグルドライブを使うことが多くあります。
ただネット上にあるためか、どうしても動作が遅く、保存したファイルがツリーのどこに保存したのか、わからなくなると結構大変な捜索作戦となってしまいます。

パスを追加する

Google Drive上のファイルは、一つのファイルを複数のツリーからたどって閲覧、編集することができます。一つのファイルで複数のところに所属しているようなファイルなどは、両方から参照できるようにしておくと便利です。
複数に所属したいファイルを選択してSHIFTキーをおしながら、Zキーを押すと、追加するパスの指定画面が出てきます。

これ、普通にメニューからは出すことができない隠しコマンドなんでしょうか?
いずれにせよ、こちらで追加したいところを指定して、追加ボタンを押すことでパスが追加されます。

あとから、どこに追加されているのか、ファイルの詳細をみると確認できます。

仕事柄、一つのファイルを複数のところから参照できると便利だったりしますが、これでかなり楽になりました。

Nov 3, 2018
ライフハック