

yarn workspacesはprivate: trueがないと動かない、projenには直接オプションがない
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
何が起きたか
projenプロジェクトで yarn projen を実行したら、synthesisの途中で依存関係インストールがコケた。
👾 install | yarn install --check-fileserror Workspaces can only be enabled in private projects.Error: Task "install" failed when executing "yarn install --check-files"原因
Yarn Classic(v1系)は、workspacesフィールドをpackage.jsonに書く場合、必ず"private": trueもセットされてないと拒否する仕様らしい。今回のプロジェクトはworkspacesを使う構成にしていたけど、privateが設定されてなかったのでここで止まった。
projenにprivateオプションは無い
じゃあprojenのプロジェクト定義(AwsCdkTypeScriptAppとかNodeProjectOptions系)にprivate: trueみたいなオプションがあるかというと、無い。試しにコンストラクタに渡してみても型エラーになる。
対処法
projenが標準で公開していないpackage.jsonのフィールドは、addField(複数まとめてならaddFields)で直接書き込むのが決まったやり方らしい。今回は.projenrc.tsにこう書いた。
import { awscdk } from 'projen';
const project = new awscdk.AwsCdkTypeScriptApp({ name: 'example-app', // 他のオプション});
project.package.addField('private', true);
project.synth();これでpackage.jsonに"private": trueが出力されるようになって、yarn projenが通るようになった。