Paths
これまでの例では、ソースコードを src
と test
の2つのディレクトリに保存することを示してきました。
Tools.deps は poly
と同様に、ソースコードとテストコードを複数のディレクトリに分割することをサポートしています。
これまでの例では .clj
のみを示してきましたが、poly
は .cljc
も認識します。(詳細は Frontend Code Options で説明。)
.clj
と .cljc
の保存方法について2つの方法を紹介します。
例として、.clj
と .cljc
の両方を含む company
component があるとします。どちらのファイルも同じ src
に保存することができます:
├── components
│ ├── company
│ │ ├── src
この方法では、component の deps.edn
を次のように設定します:
{:paths ["src"]
....
もう1つの方法は、ソースコードを2つの別々のディレクトリに保存することです:
├── components
│ ├── company
│ │ ├── clj
│ │ ├── cljc
そして component の deps.edn
ファイルの :paths
を次のように設定します:
{:paths ["clj" "cljc"]
....
すべての .cljc
コードがどこにあるかが明確に示されるためこの方法を好む人が多いようです。(私達はどちらかの方法を推奨しているわけではありません。)
Resources
resources
ディレクトリは画像やデータなどのソースコード以外のファイルを保存するためのもので、brick や project (オプション)にも配置されます。
クラスパス上でリソースパスの一意性を保つため、poly
は brick を作成する際に resources
の下にサブディレクトリを作成します。component の場合、サブディレクトリ名は component のインターフェース名になり、base の場合は base名 になります。例:
├── bases
│ ├── worker
│ │ ├── resources
│ │ │ └── worker
│ │ │ └── mydata.edn
├── components
│ ├── creator
│ │ ├── resources
│ │ │ └── creator # デフォルトではインターフェース名は component 名と一致
│ │ │ └── logo.png
テストコンテキストでのみ使用されるリソースファイルがある場合は、それらを test-resources
ディレクトリに配置することができます。
Frontend Code Options
poly
ツールは ClojureScript の .cljs
ファイルは認識しません。しかし、.cljc
ファイルは認識し、これを使ってバックエンドとフロントエンドの間でコードを共有することができます。
フロントエンドのコード構成には以下の3つの選択肢があります:
1. component もしくは base でのフロントエンドの場合
この選択肢は、すべてのフロントエンドコードを base に配置します。
poly
ツールは base 内の .cljc
ファイルを認識し、フロントエンドから使用される際にはコンポーネントの ClojureScript view となります。もし .cljc
コードをバックエンドと共有したい場合は、そのコードを1つ以上のコンポーネントに配置することになります。
2. poly 以外のディレクトリのフロントエンド
この場合 workspace の配下か外かの2つの選択肢があります。poly
ツールは両方のレイアウトを扱うことができます。どちらを選ぶかは好みの問題です。
a) Workspace 配下にフロントエンドディレクトリ配置
myworkspace
├── bases
├── components
├── development
├── myfrontend # base でなく :local/root が参照するフロントエンド用ディレクトリ
└── projects
これは base でも component でもなく、単に :local/root
として参照されるフロントエンドコードです。バックエンドコードからの .cljc
は、ライブラリとして扱い、:local/root
を介して参照することになります。
欠点は、フロントエンドのコードファイルの変更が poly によって検出されないことです。これは該当ディレクトリが poly 構造の外にあるため、poly にとって未知のものだからです。現在、poly workspace 内での ClojureScript の適切な認識とサポートについて議論を進めています。
b) Workspace 外にフロントエンドディレクトリ配置
myrepository
├── mybackend # poly dir
│ ├── bases
│ ├── components
│ ├── development
│ └── projects
└── myfrontend #
この方法は、フロントエンドコードが git リポジトリ内にありますが、poly workspace の外に配置されます。
mybackend
は poly
workspace、myfrontend
は従来型の Clojure :local/root
ライブラリです。フロントエンドの .cljc
ファイルは、上記 a と同じように :local/root
ライブラリとして参照することになります。
3. 別リポジトリのフロントエンド
最後の選択肢は、フロントエンドコードを別のgitリポジトリに配置することです。
この方法には以下のような欠点があります:
- モノレポでの作業ではなくなり、フロントエンドとバックエンドのリリースが別々になる可能性がある
- フロントエンドとバックエンドのコードが同期されなくなるリスクが高くなる