Toyokumo Tech Blog

トヨクモ株式会社の開発本部のブログです。

Clojure

Clojureを静的型付け言語にする

Clojureをschema.coreの型解析を静的に行うことで静的型付け言語のようにしていく方法を紹介します!

Babashka pods から使う clj-kondo

開発本部の飯塚です。 この記事は Clojure Advent Calendar 2022 5日目の穴埋めに向けた記事です。 今回は clj-kondo を Babashka pods として利用する方法を簡単に解説したいと思います。 用語の説明 clj-kondo Babashka Babashka pods Babashka pods とし…

Clojureで作るAPI RESTful APIを追加する

[連載]Clojureで作るAPIの12記事目です。 前回の記事はこちらです。 tech.toyokumo.co.jp 前回記事ではRing Middlewareを追加してAPIとしての体裁を整えました。 今回はRESTful APIとして振る舞うために足りない仕組みの整備をしていきます。 RESTful APIに…

Clojureで作るAPI RingMiddlewareを追加してAPIらしくする

[連載]Clojureで作るAPIの11記事目です。 前回の記事はこちらです。 tech.toyokumo.co.jp 前回記事ではルーターを追加して設定しました。 今回はその上にRing Middlewareを追加してAPIとしての体裁を整えていきます。 なお、Ring Middlewareについては次の記…

Clojureで作るAPI ルーターを追加する

[連載]Clojureで作るAPIの10記事目です。 前回の記事はこちらです。 tech.toyokumo.co.jp これまでWebアプリケーションの開発をするための準備をしてきましたが、これからは実際にWebアプリケーションとしての機能を追加していきます。 今回の記事ではWebア…

Clojureで作るAPI テストできるようにする

[連載]Clojureで作るAPIの9記事目です。 前回の記事はこちらです。 tech.toyokumo.co.jp 現在開発しているプロジェクトにはテスト対象自体がまださほどありませんが、先にテストを書ける環境を整えておくことは今後の開発の健全性のために重要です。 そこで…

Clojureで作るAPI ロギングできるようにする

[連載]Clojureで作るAPIの8記事目です。 前回の記事はこちらです。 tech.toyokumo.co.jp この記事ではロギングをできるようにしていきます。 Javaのロギングの歴史的経緯と現在 unilogを使って設定する Systemと統合する おわりに Javaのロギングの歴史的経…

Clojureのリンターclj-kondoの使い方

開発本部の飯塚です。 今回は Clojure のリンターである clj-kondo の使い方をちょっと踏み込んだところまで説明できたらと思います。 github.com Clojure でプログラムを書いている人であればすでにほとんどの方は使っているのではと思うのですが、 もし使…

Clojureで作るAPI 設定をednで管理する

[連載]Clojureで作るAPIの7記事目です。 前回の記事はこちらです。 tech.toyokumo.co.jp この記事ではアプリケーションの設定をClojureのソースではない設定ファイルで管理できるようにしていきます。 なぜ設定ファイルで管理する必要があるのか aeroを追加 …

Clojureで作るAPI ビルドして実行できるようにする

[連載]Clojureで作るAPIの6記事目です。 前回の記事はこちらです。 tech.toyokumo.co.jp この記事ではビルドしてJARファイルを生成し、 java コマンドでアプリケーションを実行できるようにしていきます。 JARファイルとは tools.buildを使う Makefileに追記…

Clojureで作るAPI 開発用のコードを分離する

[連載]Clojureで作るAPIの5記事目です。 前回の記事はこちらです。 tech.toyokumo.co.jp この記事では開発用のコードと実際のコードとを分離し、開発用の関数が評価された状態でREPLが起動されるようにすることで、今後の生産性を上げるようにします。 alias…

Clojureで作るAPI ライフサイクルと依存関係を管理できるようにする

[連載]Clojureで作るAPIの4記事目です。 前回の記事はこちらです。 tech.toyokumo.co.jp この記事ではREPLを再起動することなくWebサーバーを再起動できるようにしていきます。 なぜ再起動できる必要があるのか 使用するライブラリを追加 Componentを実装 Sy…

Clojureで作るAPI Web サーバーを立ち上げる

[連載]Clojureで作るAPIの3記事目です。 前回の記事はこちらです。 tech.toyokumo.co.jp この記事ではWebサーバーを立ち上げていきます。 Webサーバーのライブラリを追加 まずは依存関係にWebサーバーのライブラリを追加します。 deps.edn を次のようにして…

Clojure で作るAPI 開発環境を構築する

[連載]Clojureで作るAPIの2記事目です。 まずは開発環境を作るところからやっていきましょう。 要件 インストール REPLを動かす First commit フォーマッターの設定 リンターの設定 Makefileにまとめる おわりに 要件 今回は次の要素を必須の要件として構築…

Clojureで作るAPI はじめに

これから、「Clojureで作るAPI」と題して、Clojureを使ってAPIを作る方法をステップバイステップで解説していきたいと思います。 内容としては開発環境の構築から始め、必要な事柄を理解しながら徐々に機能を足していき、最終的には本番環境で使えるようなAP…

Clojure記事まとめ

弊社で書いたClojure関連記事をまとめます。 リンクになっていないものは今後執筆予定です。 開発環境 エディター フォーマッター リンター プロジェクト Clojure基礎知識 Clojureを使ったWebアプリケーション開発のための基礎知識 [連載]Clojureで作るAPI …

Spacemacsで始める Clojure 開発

こんにちは。開発本部の木下です。 先日ClojureアプリケーションをLSPで開発するための方法について書きました。 tech.toyokumo.co.jp そこで本記事では上記のような Clojure アプリケーションをSpacemacsで開発するための設定について記載します。 なお、Sp…

モノレポなClojureプロジェクトをClojure LSPで開発するための設定方法

こんにちは。開発本部の木下です。 Visual Studio Codeの普及と同じくしてLSP(Language Server Protocol)を開発で使用することは普通のこととして浸透したように思います。 LSP があれば、Intellij IDEAに代表される IDE が提供してきたような開発体験を VSC…

医学部を卒業後、トヨクモに就職して1年が経ちました

初めまして、開発本部の細木です。 21年度新卒でトヨクモに入社し1年が経ちました。 今回は就職から1年経って今までの経験などを振り返ってみたいと思います。 就職までの経緯 医師以外の道 ITエンジニアという職業 内定を得るまで Progate(5年生の10月頃〜)…

OSSへの寄付活動について

開発本部の飯塚です。 弊社ではオープンソースソフトウェア(以下、OSS)に対して継続的な寄付という形で開発の支援を行っています。 この件について今まで特にアウトプットがなかったので、これを機にトヨクモがOSSをどう思っているのか、なぜ寄付をしている…

メール送信ライブラリ tarayo のすすめ

開発本部の飯塚です。 今回は担当している製品で利用しているメール送信ライブラリを自社製のものに移行した経緯や利点などをまとめてみました。 概要 kMailer というサービスの開発/運用を行っている コア機能であるメール送信のライブラリとして postal を…

AWS CLI を Babashka スクリプトでラップして楽しよう

開発本部の飯塚です。 業務で Babashka を使う機会を無理矢理作ってみたので、その副産物を公開してみます。 動機 CloudWatch Logs からログを抽出して調査したい AWS CLI を使ってもいいが、クエリの発行、クエリの完了待ち、結果取得が面倒 良い感じにラッ…

Vim で始める Clojure 開発

Vim/Neovim 向けに Clojure の開発環境を提供するプラグイン vim-iced を使って Clojure 開発環境の構築をしてみましょう。 なお vim-iced は個人的に開発している拙作の Vim プラグインで、実際に私が業務で(勝手に)利用しているという実績があります。 前…

Clojureのフォーマッターcljstyleの使い方

こんにちは。開発本部の江口(@egs33)です。 弊社ではClojure製の製品を開発していますが、ClojureのフォーマッターとしてOSSのcljstyleを利用しています。 利用するにあたって機能の追加やバグの修正などのコントリビュートも行いました。 tech.toyokumo.co.…

Clojure Ring Middleware大全

これはClojure Advent Calendar 2019の21日目の記事です。 そして、こちらの記事の続きにもなっています。 tech.toyokumo.co.jp 本記事では、RingのMiddlewareについて解説していきます。 基本的に上記の記事を理解いただいた前提で話を進めていこうと思いま…

Zipperでコードフォーマッターを実装する (greglook/cljstyle に学ぶ)

北川です。 Clojure 始めました。 Clojure のお勉強をするにあたり何か良い題材はないかと探していたところ greglook/cljstyle というツールが目につきました。 以前からフォーマッターや linter の実装に興味があったということもあり、ちょうど良いのでこ…

nil punningが難しい(seq vs empty?)

これはClojure Advent Calendar 2019 - Qiitaの二日めの記事です。nil punningが難しいなあと個人的に感じているので、なぜリッチヒッキーさんはnil punningを選択したのだろうか、nil punningが優れている点は何か、ということを調べて書こうと思います。調…

Elastic Beanstalk Multicontainer DockerでChromeDriverを使うJavaアプリケーションをデプロイする

こんにちは。 @makinoshi です。 トヨクモでは製品の外形監視などに、Clojureで作成したWebアプリケーションを使っています。 E2E監視に使うためにサーバー上でChrome Driverなどを動かす必要がありましたが、その環境を構成管理ツールでも、ましてや手動で…

ClojureのWeb開発でもっとも重要なRing Handlerについて理解する

こんにちは。開発本部の @makinoshi です。 トヨクモではメインの開発言語としてClojureを採用しています。 Clojureの文法は簡潔でデータ型も少なく、比較的覚えやすい言語だと思います。 一方でWeb開発においては、Symfony/LaravelやRuby on Railsのような…