私の最初のJavaライブラリの執筆と出版の私の経験


一年以上前、友人は私をコンセプトに紹介しましたRailway-Oriented Programming (rop)私はアイデアとfluency それはそれと共に来ます、しかし、それは機能的プログラミングから生まれたスタイルでしたlambdas and streams in Java 8 .
既にいくつかのJavaライブラリが存在していましたが、私にとって良い機会であったので、自分自身を書くのはいい考えかもしれません.
  • 何を知っているROP
  • TDDを行う
  • Javaライブラリを公開可能なパッケージリポジトリに書き込む方法を学ぶ
  • Githubアクションを使ってパイプラインを設定し、ライブラリを自動的にパッケージリポジトリに公開します

  • 数ヶ月と何カ月も先延ばしの後、私は生産準備ができていない(それはとにかくゴールではなかったが)何かを利用できるようになった.

    電総研 / レール


    Javaによる鉄道指向プログラミング


    興味があれば、スナップショットを得ることができますhere .
    私は、jrailが何であるかについて書くことを計画しています、それが何をすることができるか、そして、私が考えるものはその欠点です(私が作ったものは本当の略奪でありません).しかし、それはこのポストがすべてであるものでありません.ここでは、いくつかの考えとハイライトからの旅です:
  • Naming is (still) hard
  • I suck at GitHub
  • I don't think I truly understood Monads
  • Spock is great but it didn't fit my needs
  • Open-source Licensing Options
  • Dipping my toes on GitHub Actions
  • Creating and approving my own PR
  • Publishing the library
  • 命名は固い


    それがそうであるかもしれないようにclich d dとして、命名は本当に難しいです.私はほとんどのJavaのもののいずれかの開始または終了“J”としたので、私はjrailのために解決する前に、ほぼ一週間の名前をミューリングされている.リポジトリを作成したのは、日本の鉄道の名前のように見えました.しかし、ちょっと、それはすでにつくられました、そして、私は名前を考えているもう一つの週を使いたくありません.

    私はgithubで吸う


    これの前に、私は私のGithub口座でどんな重大な倉庫でも持ちません.私が持っているもののほとんどは、ショーケースに値するプロジェクトよりむしろ紙紙落書きのようでした.はい、それは私が仕事の外でコードしないと言うかなり長い方法です.

    その貢献カレンダーを見てください.とても印象的です
    また、私は私のSSHキーと秒だけではなく数分かかる必要がありますリポジトリのセットアップに時間の恥ずかしい量を取った.これはいい飲み物ですね.

    私は本当にモナドを理解していないと思います


    そして、この時点で、私は誰もが思わない.
    冗談を言わずに、私は本当にこの根本的な理論を理解したかったです.私は、それが単にそのような方法でされる理由を理解することなく何かをすることが危険であると思っています.私が最初にこのプロジェクトに乗り出したとき、私はカテゴリー理論と機能プログラミングについて多くの材料を消費するのを覚えていますが、多くの情報を保持することができませんでした(私の脳は偉大でありません).
    私はそれを理解して得た最も近いthis explanation .
    それで、私は友人に自分の言葉を説明しようとしました.しかし、私は彼の質問に答えることができなかったので、おそらく私は本当にmonadsを得ませんでした.
    普通の人のように諦めた.私が再びモチベーションを持っていたならば、私は後でそれに戻るかもしれません、しかし、今のところ、私は進むのに十分に学んだと思います.それから、テストの助けを借りてもちろん、APIを直感的に使えるようにする方法にフォーカスを移しました.

    スポックは素晴らしいが、それは私のニーズに合わなかった


    あなたはおそらくテストフレームワークと呼ばれるSpock , はGroovy . それは素晴らしいし、私は仕事のために毎日使用して大好きです.それで、私は最初に私のテストをそれを使って書きました.
    しかし、動的に型付けされた言語を持つことはAPIを設計する際にあまり役に立たないことに気づきました.私はまた、私が作ったAPIを使うためにそれが何であるかを知りたかったです.それで、足の上で私自身を撃つのを避けるために、私は代わりにJUnitでテストを書き直すことに決めました.
    もう一つの理由は、テストをドキュメンテーションやコンパイル例として提供したいということです.私は念頭に置いてJava DEVSとこのライブラリを書いて、Groovyのテストを持っている別の方向に向かって一歩のソートです.いくつかの違いの一つは、ラムダ式の構文が括弧のかわりに巻き括弧を使用するGroovyクロージャです.
    { closureParameters ->  statements }
    
    それは経験豊富なdevのためにそれほど重要ではないかもしれないが、私はもはや読者に追加の認識負荷を追加する必要はありませんでした.Javaでテストを記述すると、“example”はより明確で一貫性がありました.

    オープンソースライセンスオプション


    なぜHeckはそれらのあまりにも多いですか?ありがたいことに、ギタブは創造したhttps://choosealicense.com/ 私のような初心者を助けるために適切なライセンスを選択します.
    それは人々がとにかくこれを使用するつもりはないです.しかし、念のため、私は彼らに彼らが何をしたいのか気にしないということを彼らに知らせたかったです.

    GitHubアクションに私のつま先を浸すこと


    自分のCiを設定するのは初めてです.このブログのタイプをタイプするのは実際より簡単でした.Githubはすでにいくつかのワークフローのテンプレートを提供しているので、それは本当にクリックするだけの問題です.それはちょうどYAML(最も多くのdevopsものがそうであるので)で遊ぶのもかなり簡単です.

    自分自身のPRの作成と承認


    私はこれを説明する必要はないと思う.これはこのプロジェクトの最良の部分です

    図書館の出版


    これは、プロジェクトの最もエキサイティングなまだ挫折の一部です.私はできるだけだったpublish a snapshot , しかし、私はきちんとそれを署名することができませんでした.私のCIで複数の失敗の後、私は署名をスキップし、ちょうどスナップショットを公開することを決めた.私は署名されていないパッケージを出版したくなかったが、私は怠惰であり続けた.私は既に私がするべきことをしたように感じました.
    うん、怠け者だ.わかってる.

    最後の思考



    Jrailを作ることは、私がそれを完成させなかったにもかかわらず、かなり楽しい運動でした.私は後でそれを改善するために、私は私がropに続いているとは思わないので、そのパラダイムを再訪するために、それに復帰する可能性があります.しかし、現実的に言って、私は通常、それがちょうど仕事時間の後、コーディングから離れているのを好むので、それをそのまま残します.それは、ものを釣り合わせて、他のものを楽しむ時間をとっている私自身の方法です.
    それにもかかわらず、それはまだ私は自分自身の基本を実践し、時々私は他の私が仕事で学ぶもの以外に行うことができるものを探索するための素晴らしいリマインダーです.私は、ROPの若干の原則を借りて、彼らを我々のコードに適用すると思います.

    更なる読書


    あなたが興味を持っていて、それを試してみたいと思ったり、自分で読んだりしたい場合は、ここで始めるためのリソースがいくつかあります.

  • Railway-oriented Programming スコットWlaschinによって.
    これは私が知っている限りのアイデアの元のソースです.

  • How to Publish Open Source Java Libraries to Maven Central エミールKirschnerによって.
    私は他のガイドも読みますが、彼はKotlinで書かれているにもかかわらず、彼の最も簡単です従う
  • GPG Cheat Sheet
  • 機能的プログラミング記事の束

  • Functors, Applicatives, And Monads In Pictures アディBhargavaによって

  • Your easy guide to Monads, Applicatives, & Functors
    これは本当にそのアニメーションでクールに見える
  • This answer in Stackoverflow

  • Category Theory for Programmers Bartoszミルウォースキーによって.
    私はこの本を読み終えていません、しかし、あなたが数学の抽象的な話題に興味があるならば、それは本当に面白いです