Paths

これまでの例では、ソースコードを srctest の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 の外に配置されます。

mybackendpoly workspace、myfrontend は従来型の Clojure :local/root ライブラリです。フロントエンドの .cljc ファイルは、上記 a と同じように :local/root ライブラリとして参照することになります。

3. 別リポジトリのフロントエンド

最後の選択肢は、フロントエンドコードを別のgitリポジトリに配置することです。

この方法には以下のような欠点があります:

  • モノレポでの作業ではなくなり、フロントエンドとバックエンドのリリースが別々になる可能性がある
  • フロントエンドとバックエンドのコードが同期されなくなるリスクが高くなる

参照

Source code — polylith/clj-poly 0.2.19