ローカルにある依存プロジェクト・パッケージを参照する [Elixir]
自分用メモ
自分が書いているライブラリが依存しているプロジェクト・パッケージを
ローカルにおいて、依存パッケージのソースをちょっと編集して動作確認したい時がある。
Elixir でも絶対できるはず!と思ってたけど、調べずにごまかしながらやってきた。
今回、行き詰まって調べた。
ついでに、他のプログラミング言語でも調べた。
相対パスが指定できるところは、大体 github や gitlab のリポジトリの URL も受け付けるようになっている。
Elixir
--------
https://qiita.com/hakaicode/items/6466ee9c2acefc7d8899
例えば、依存するのが foo というプロジェクトなら mix.exs に
{:foo, path: "../foo", override: true},
とか書いて、
foo の project で
mix deps.get
mix archive.install
と、すればいいみたい。
Go
--------
go get でダウンロードされた ~/go/pkg/mod/の下のソースを編集するとやりたいことができるけど、
go mod edit -replace とか、 go.mod を直接書き換えるとかして、指定パスをモジュールの参照パスにできるみたい
https://www.asobou.co.jp/blog/web/go-mod-replace
go.mod を書き換えるのは綺麗だけど、覚えてられないし、戻すの忘れそう。
Python
--------
pip instal -e パス
でできるけど、自分は、 venv 環境 pip install した site-package の中のファイルを編集してる。
複数ディレクトリに置かれたパッケージをインストールするときに便利な時はあると思うけど自分はやったことない。
github のリポジトリにあるパッケージを
pip instal -e git+https://github.com/some/package
とかしたことはある。
Rust
--------
cargo.toml の
[dependencies] に
bar = { path = "../bar" }
と書けばいい。
https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html
自分が書いているライブラリが依存しているプロジェクト・パッケージを
ローカルにおいて、依存パッケージのソースをちょっと編集して動作確認したい時がある。
Elixir でも絶対できるはず!と思ってたけど、調べずにごまかしながらやってきた。
今回、行き詰まって調べた。
ついでに、他のプログラミング言語でも調べた。
相対パスが指定できるところは、大体 github や gitlab のリポジトリの URL も受け付けるようになっている。
Elixir
--------
https://qiita.com/hakaicode/items/6466ee9c2acefc7d8899
例えば、依存するのが foo というプロジェクトなら mix.exs に
{:foo, path: "../foo", override: true},
とか書いて、
foo の project で
mix deps.get
mix archive.install
と、すればいいみたい。
Go
--------
go get でダウンロードされた ~/go/pkg/mod/の下のソースを編集するとやりたいことができるけど、
go mod edit -replace とか、 go.mod を直接書き換えるとかして、指定パスをモジュールの参照パスにできるみたい
https://www.asobou.co.jp/blog/web/go-mod-replace
go.mod を書き換えるのは綺麗だけど、覚えてられないし、戻すの忘れそう。
Python
--------
pip instal -e パス
でできるけど、自分は、 venv 環境 pip install した site-package の中のファイルを編集してる。
複数ディレクトリに置かれたパッケージをインストールするときに便利な時はあると思うけど自分はやったことない。
github のリポジトリにあるパッケージを
pip instal -e git+https://github.com/some/package
とかしたことはある。
Rust
--------
cargo.toml の
[dependencies] に
bar = { path = "../bar" }
と書けばいい。
https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html
Elixir 再入門 [Elixir]
具体的な日付はわからなくなっているが、 Elixir は、2018年頃に、勉強を初めて少しコードを書いて、それっきりになっている。
いくつかのプログラミング言語は書き始める前に挫折してしまったが、Elixir はギリ書ける、もしくは、もうちょい練習したら書けるというレベルまできたが、放置してしまっている。
おそらく、自分が(書ける中で)もっとも未熟なプログラミング言語だと思う。
せっかく勉強したのに、書けるようになっていません、だともったいないので、今年 2023年は、読みかけになっている Elixir の本を読み直して、Elixir で何か習作を書いて、もう少し自信を持って Elixir を書ける、と言えるようになりたい・・・というのを今年の目標にしたい。
ただ、最近の TIOBE のプログラミング言語ランキングだと
https://www.tiobe.com/tiobe-index/
Elixir (と Erlang)は、51位〜100位のどこかなので、もしかして、Elixir って十分な開発者を集められていなくて、このまま衰退していく?
・・・というのが心配。
いくつかのプログラミング言語は書き始める前に挫折してしまったが、Elixir はギリ書ける、もしくは、もうちょい練習したら書けるというレベルまできたが、放置してしまっている。
おそらく、自分が(書ける中で)もっとも未熟なプログラミング言語だと思う。
せっかく勉強したのに、書けるようになっていません、だともったいないので、今年 2023年は、読みかけになっている Elixir の本を読み直して、Elixir で何か習作を書いて、もう少し自信を持って Elixir を書ける、と言えるようになりたい・・・というのを今年の目標にしたい。
ただ、最近の TIOBE のプログラミング言語ランキングだと
https://www.tiobe.com/tiobe-index/
Elixir (と Erlang)は、51位〜100位のどこかなので、もしかして、Elixir って十分な開発者を集められていなくて、このまま衰退していく?
・・・というのが心配。
firebirdex status [Elixir]
この記事は Firebird Advent Calendar 2022 https://qiita.com/advent-calendar/2022/firebird の 5日目の記事で
https://nakagami.blog.ss-blog.jp/2019-12-22 の続きです。
Elixir の Firebird ドライバー firebirdex https://hex.pm/packages/firebirdex は、今年 @hermanius の報告と修正により、 いくつかの機能追加と不具合修正ができました。
機能追加
- ping() が動作するようにした
- 接続パラメータに charset を指定できるようにした https://github.com/nakagami/firebirdex/issues/7
不具合修正
- nil conversion error https://github.com/nakagami/firebirdex/pull/2
- tatement after query https://github.com/nakagami/firebirdex/pull/5
- Pending transacions https://github.com/nakagami/firebirdex/issues/6
手助けしてくれた @hermanius に感謝します。
https://nakagami.blog.ss-blog.jp/2019-12-22 の続きです。
Elixir の Firebird ドライバー firebirdex https://hex.pm/packages/firebirdex は、今年 @hermanius の報告と修正により、 いくつかの機能追加と不具合修正ができました。
機能追加
- ping() が動作するようにした
- 接続パラメータに charset を指定できるようにした https://github.com/nakagami/firebirdex/issues/7
不具合修正
- nil conversion error https://github.com/nakagami/firebirdex/pull/2
- tatement after query https://github.com/nakagami/firebirdex/pull/5
- Pending transacions https://github.com/nakagami/firebirdex/issues/6
手助けしてくれた @hermanius に感謝します。
ecto_sql 3.0 の adapter のテスト [Elixir]
(自分用のおぼえがき)
Elixir の Web フレームワーク Phonix のデーターベース層のライブラリがEcto で、
3.0 から ecto と ecto_sql に分割されて、SQL ベースのデーターベースを使う場合はecto_sql をdeps に書いておけばいいらしい。
https://github.com/elixir-ecto/ecto_sql
ecto_sql は内部で ecto に依存しているので、コア部分が ecto で、SQL に依存している部分を ecto_sql に括りだしたということか。
デフォルトで postgresql と mysql に対応した Adapter を用意していて、それぞれ postgrex、mariaex というドライバーを使っている。
自分は、Ecto Adapter に興味があるので、 Ecto Adapter をテストする方法を探す。
$ ECTO_ADAPTER=pg mix test
$ ECTO_ADAPTER=mysql mix test
で、テストできる模様。
それぞれ、ユーザーが postgresql, root のパスワードなしでlocalhost に接続して、 ecto_test データーベースでテストするようになっている。
環境変数 MYSQL_URL, PG_URL に
ecto_sql 3.0 でサポートしているデーターベース(PostgreSQL, MySQL)で、別のデーターベースドライバーを使う Adapter を書く例
http://blog.plataformatec.com.br/2019/01/building-a-new-mysql-adapter-for-ecto-part-iv-ecto-integration/
Pull Request が送られているhttps://github.com/elixir-ecto/ecto_sql/pull/66
Elixir の Web フレームワーク Phonix のデーターベース層のライブラリがEcto で、
3.0 から ecto と ecto_sql に分割されて、SQL ベースのデーターベースを使う場合はecto_sql をdeps に書いておけばいいらしい。
https://github.com/elixir-ecto/ecto_sql
ecto_sql は内部で ecto に依存しているので、コア部分が ecto で、SQL に依存している部分を ecto_sql に括りだしたということか。
デフォルトで postgresql と mysql に対応した Adapter を用意していて、それぞれ postgrex、mariaex というドライバーを使っている。
自分は、Ecto Adapter に興味があるので、 Ecto Adapter をテストする方法を探す。
$ ECTO_ADAPTER=pg mix test
$ ECTO_ADAPTER=mysql mix test
で、テストできる模様。
それぞれ、ユーザーが postgresql, root のパスワードなしでlocalhost に接続して、 ecto_test データーベースでテストするようになっている。
環境変数 MYSQL_URL, PG_URL に
user:password@serverと書くと指定のユーザーID, パスワードで接続してテストが実行される。
ecto_sql 3.0 でサポートしているデーターベース(PostgreSQL, MySQL)で、別のデーターベースドライバーを使う Adapter を書く例
http://blog.plataformatec.com.br/2019/01/building-a-new-mysql-adapter-for-ecto-part-iv-ecto-integration/
Pull Request が送られているhttps://github.com/elixir-ecto/ecto_sql/pull/66