サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
tech.toyokumo.co.jp
北川です。 先日、任意の色の背景がある時、テキストの文字色を黒か白どちらを使うのが適当か?という問題に当たりました。最終的にまあまあ満足のいく結果が得られたので記事にしました。 背景色と文字色の問題 WCAG 文字色決定戦略を決める 実装 おわり 背景色と文字色の問題 人間が文字色を決めた これは色々な背景色について黒か白の文字色の選択を筆者の主観に基づき決めた画像です。社内でフィードバックを求めたところ「黄緑や水色が見にくい」と不評でした。 このように当人としては見やすいと思っても、他の人から見やすいとは限りません。 またよくある問題として、一律黒文字テキストでスタイリングしていたがボタンの塗りつぶしが濃い色のときに見辛くなってしまった、ということもあると思います。 文字色が黒か白かに限らずそれ以外の任意の文字色でも同様な一般的な問題かと思います。 毎回どうすれば良いか判断するのも手間が
こんにちは、開発本部の松尾です。 Clojureは標準ライブラリに使いやすい道具が充実していて、可読性の高い抽象的なコードが書きやすく、Javaとの相互運用のお陰で使える資産も多いため実用的で、良い言語だと思っています。 しかし、おこがましくも1点だけ改善出来るところがあると思っています。それは、「静的型解析が出来ない(弱い)」という点です。 Pythonの型ヒント、Ruby3の静的型チェッカーの例に見られるように、静的型解析によるメリットは、パフォーマンスという観点を抜いても、バグを減らして開発効率を上げる観点から、もはや見過ごすことが出来ないのが時代の潮流だと感じています。特に中規模〜大規模の業務でのコードになってくると、正確さやドキュメント製の観点から重要度が増してくるかと思います。 ということで、静的型解析を出来るようにしていきたいと思いますが、なぜやる必要があるのか。既に他の手段
開発本部の飯塚です。 この記事は Clojure Advent Calendar 2022 5日目の穴埋めに向けた記事です。 今回は clj-kondo を Babashka pods として利用する方法を簡単に解説したいと思います。 用語の説明 clj-kondo Babashka Babashka pods Babashka pods としての clj-kondo 準備 プロジェクトの解析 public な var の抽出 結果の出力 最後に 用語の説明 clj-kondo clj-kondo とは何か、どう使うのかについては以下の記事でまとめているので もし知らなければ先にこちらを参照することをおすすめします。 tech.toyokumo.co.jp Babashka Babashka は Clojure のインタプリタです。 GraalVM を使ってネイティブイメージとして動くため
Thanks OSSチーム チームリーダーの飯塚です。 タイトルの通りですがこの度、Thanks OSS Award というサイトをついに公開できたのでその紹介です。 Thanks OSS Award とは 究極の目標 活動裏話 GitHub Sponsors が有効でない GitHub Sponsors の任意金額の開放 最後に Thanks OSS Award とは Thanks OSS Award とは私達の製品開発で使用しているライブラリ/ツールなどにおいて、 年度単位で選出した開発者の方々にその開発の継続を金銭的に支援しましょうという活動です。 oss.toyokumo.co.jp 上記サイトに詳細は書かれていますが、この活動のポイントは「継続」です。 新規機能の追加や問い合わせサポートではなく、今までやっていた開発を今後も同じように継続してもらうことを目的とした支援になっていま
こんにちは。開発本部の松尾です。 今回は、趣味でWebAssemblyをターゲットにしたコンパイラを作った知見を元に、WebAssemblyについての解説記事を書きました。 WASMとは? WASMの用途やメリット 今回やること テキスト形式について Real World WASM WASMとは? WebAssemblyの略で、Webプラットフォーム上で実行出来るように設計された、命令セット及び言語のことです。 Webにおいて広く使われている JavaScriptが、文字列からパースされて動的に実行されているのに対して、 WASMは、機械語に近い状態にコンパイルされたコードをバイナリ形式で配信することが出来る為、多くのケースにおいて、JavaSciptよりも高速に動くように設計されています。 WASMの用途やメリット WASMの機能はJavaScriptに比べてかなり限定されており、基本的
[連載]Clojureで作るAPIの12記事目です。 前回の記事はこちらです。 tech.toyokumo.co.jp 前回記事ではRing Middlewareを追加してAPIとしての体裁を整えました。 今回はRESTful APIとして振る舞うために足りない仕組みの整備をしていきます。 RESTful APIに必要な残りの要素 パスパラメーターの制御 バリデーション おわりに RESTful APIに必要な残りの要素 実際のところこれまでの実装によって、ルーティングやJSONのエンコード/デコードなどAPIとしては十分な機能を備えるようになってきました。 その上でRESTful APIとして不足している機能としてはリクエストの パスパラメーター(URLに含まれるパラメーター) クエリパラメーター リクエストボディ の制御があります。以降ではこの3つをまとめてリクエストパラメーターと呼ぶ
こんばんは。開発本部の石川です。 今回は、弊社のkintone連携製品の一つであるプリントクリエイターに「縦書き出力機能」*1*2を追加した軌跡を備忘録として書き残しておこうと思います。 プリントクリエイターとは 縦書きに対応したライブラリが無い問題 縦書きを実現する方法の検討 TCPDF改造案 -> ボツ 文字列の描画方向を変更する 縦書き用の記号を利用するように 非埋め込みフォントで縦書きする 縦書き用TCPDF独自フォントデータを作成する 文字列を1文字ずつ分割して縦に並べる -> 採用 まとめ プリントクリエイターとは サイボウズ社が提供するkintoneに連携するWebサービスで、kintoneに保存されたレコード情報*3からワンクリックでPDF(帳票)を出力する機能を提供しています。 文字列の印字は勿論、画像/バーコードの印字や宛名ラベル形式での出力など、kintoneの印刷機
[連載]Clojureで作るAPIの5記事目です。 前回の記事はこちらです。 tech.toyokumo.co.jp この記事では開発用のコードと実際のコードとを分離し、開発用の関数が評価された状態でREPLが起動されるようにすることで、今後の生産性を上げるようにします。 aliasを追加 user.clj おわりに aliasを追加 今のところdeps.ednで :paths ["src"] と指定しているので、ライブラリ以外でクラスパスに含まれるファイルはsrc以下のものです。 しかしsrc以下に開発のためのコードを含めてしまうと、それらもビルドの対象になってしまうので避けたいです。 そこで、開発時にだけクラスパスに含まれるディレクトリを設定することでこの問題を回避します。 deps.ednに :aliases を追加します。 ;; ./.deps.edn {:paths ["src"
これから、「Clojureで作るAPI」と題して、Clojureを使ってAPIを作る方法をステップバイステップで解説していきたいと思います。 内容としては開発環境の構築から始め、必要な事柄を理解しながら徐々に機能を足していき、最終的には本番環境で使えるようなAPIを作れるところまで到達したいと思っています。 作っていくものも、本番で使うことができないようなものではなく、実際に弊社が本番環境で行なっていることに近い構成を取りながら、認証・認可といった機能も持ち、今後何をしていけば自分が必要な機能を足していくことができるのかわかる水準を目指します。 本筋と関係のない必要な知識も適宜リンクを提示して補足していくので、Clojureの経験がない人、Webアプリケーションサーバーを作ったことがない人であっても、記事の内容を実践していくことでClojureでAPIを作れるようになることを目指していきま
こんにちは。CTOの木下です。 「昇給によって年収1,000万円を超えるソフトウェアエンジニアを産み出す」という目標の達成報告をしたいと思います。 実は初めて達成してからかなり時間が経ってしまっているのですが、これまで、そしてこれからの取り組みによってさらに多くのメンバーが達成していく見込みであることを受け、区切りとして記事に残しておきたいなと考えてこの記事を書くことにしました。 遠い目標 賞与の導入と増額へ 昇給の推移 目標達成 なぜ昇給にこだわったのか? これから 遠い目標 私が入社したのは2016年3月なのですが、当時CTOの落合は「昇給によって年収1,000万円を超えるエンジニアを産み出す」ということを口にしていました。 しかしながら2016年3月以前にいた社員数は3人程度で、売上規模も小さい会社でした。 そのため人件費にかけられる金額も絶対額として大きくなく、特段給与水準の高い会
弊社で書いたClojure関連記事をまとめます。 リンクになっていないものは今後執筆予定です。 開発環境 エディター フォーマッター リンター プロジェクト Clojure基礎知識 Clojureを使ったWebアプリケーション開発のための基礎知識 [連載]Clojureで作るAPI ライブラリ活用 その他 まとめ 開発環境 エディター Spacemacsで始めるClojure開発 Cursive(Intellij)で始めるClojure開発 VSCodeで始めるClojure開発 Vimで始めるClojure開発 フォーマッター Clojureのフォーマッターcljstyleの使い方 リンター Clojureのリンターclj-kondoの使い方 プロジェクト モノレポなClojureプロジェクトをClojureLSPで開発するための設定方法 Clojure基礎知識 Clojure基礎文法最
初めまして、開発本部の細木です。 21年度新卒でトヨクモに入社し1年が経ちました。 今回は就職から1年経って今までの経験などを振り返ってみたいと思います。 就職までの経緯 医師以外の道 ITエンジニアという職業 内定を得るまで Progate(5年生の10月頃〜) AtCoder(5年生の11月頃〜) Web開発 就職活動 入社後にやったこと 4〜5月 スケジューラーチームに配属 6〜9月 React Query導入 バックエンド入門 仕事の仕方について 10〜11月のファーストリリースまで 11月ファーストリリース後〜3月 Zoom連携機能 予定詳細ポップアップの全画面表示 最近 応用情報技術者試験 1年働いてみた感想 自己肯定感を得ることができた 仕事のスタイルが自分に合っている Clojureが楽しい 非情報系出身でもやっていける 周りが優秀 競プロにかなり助けられている まとめ 就
こんにちは。開発本部の木下です。 先日ClojureアプリケーションをLSPで開発するための方法について書きました。 tech.toyokumo.co.jp そこで本記事では上記のような Clojure アプリケーションをSpacemacsで開発するための設定について記載します。 なお、Spacemacs は現在のメインブランチである develop ブランチを使用していることを前提としています。 共通設定 プロジェクト固有の設定 ケース 1: alias を指定した REPL への接続 ケース 2: shadow-cljs と deps.edn を組み合わせて使っている場合 まとめ 共通設定 Clojure アプリケーションを Spacemacs で開発する場合に必須で満たしてほしい要件は次のようなものです。 Clojure LSPが動作し、LSP が提供する機能を使うことができる CI
こんにちは。開発本部の木下です。 Visual Studio Codeの普及と同じくしてLSP(Language Server Protocol)を開発で使用することは普通のこととして浸透したように思います。 LSP があれば、Intellij IDEAに代表される IDE が提供してきたような開発体験を VSCode や Vim や Emacs といった普段から自分が使用しているエディタで得られることができるようになります。 しかしながら弊社の Clojure アプリケーションで LSP を使った開発を生産的に行うには 1 つ問題がありました。 この記事ではどういった問題なのかということと、その解決策について記載します。 これまでの構成 LSP で開発するときの問題点 解決策 1: LSP のための deps.edn を用意する 解決策 2: 1 つのモジュールにまとめる 2.1 ソース
こんにちは。開発本部の江口(@egs33)です。 弊社ではClojure製の製品を開発していますが、ClojureのフォーマッターとしてOSSのcljstyleを利用しています。 利用するにあたって機能の追加やバグの修正などのコントリビュートも行いました。 tech.toyokumo.co.jp 上の記事はフォーマッターの内部実装についての説明ですが、 この記事ではcljstyleの使い方を説明したいと思います。 また、この記事はバージョン0.12.0の情報をもとに書いています。 この記事はバージョン0.15.0の情報をもとに書いています。(2022年6月更新) Clojureのフォーマッターの現状 cljstyleとは 実行方法 cljstyleの設定 .cljstyle ファイルの場所 各設定の内容 :files / :extensions :files / :pattern :fil
北川です。 Symfony アプリを AWS Elastic Beanstalk Multi-Container Docker を用いて構築・運用する事例の紹介です。 弊社が提供するフォームブリッジというサービスは実際にこの記事の内容に基づき作られています。 なおベストプラクティスを模索中だったり、生々しい妥協案も出てくるので暖かい目で読んでいただきますと幸いです。 構成 Symfonyアプリでの事前準備 環境変数の設定 ログを標準出力に出す ジョブのAPI化 Docker のビルド ECR PHP Dockerfile Nginx Dockerfile Elastic Beanstalk 設定ファイルの管理 ディレクトリ構成 config.yaml Dockerrun.aws.json cron ジョブ .ebextensions デプロイ ローリングデプロイ 手順 構成 Nginx S
開発本部の齊藤です。2021年の1月で退職することになりました。業務内容の紹介も兼ねて今まで何をやってきたか、これから何をするかについて書きます。 入社までの経緯 入社してからやったこと kintone-query-builder (2019年4月) pc-auto-save (2019年5月) kMailer (2019年6月~10月) 新製品DataCollect (2019年11月~2020年5月) 別の新製品開発 (2020年6月~) 会社員生活の感想 なぜ退職するのか 入社までの経緯 私はもともと大学の学部を卒業した後に大学院の修士課程に進学する予定でしたが、卒論があまりうまく行きませんでした。なんとか先生に介護してもらいながら卒論を終えたものの、自分で思うような卒論が書けず、 「大学院に進学しても地獄のような思いをするだけでは?」という思いが強くなっていきました。今から振り返る
こんにちは。開発本部の飯塚です。 4月に第2子が生まれ、4ヶ月の育児休暇を取得しました。 育休の入るまでにしたこと 育休を取得して良かったこと 理想と現実 育休の長さについて 復帰に際しての不安 最後に 育休の入るまでにしたこと 開発本部では毎週目標を決めて翌週頭に何ができたか/できなかったなどを振り返るのですが、出産予定日がある程度確定した時点で、育児休暇に入るまでの計画を作成して共有・レビューしました。 この計画作成でありがたかったのが、育休に入る予定の2週間前から待機期間として雑務を中心とした計画とし、いつでも育休に入れる状態にさせていただいたことです。 これにより予定日が近づいてきても途中の業務や引き継ぎに関する不安を抱えなくて済み、精神衛生上とても良かったです。 なお実際に生まれたのが予定日の5日前だったので(私目線では)スムーズに育休に入れたと思っています。 育休を取得して良か
こんにちは。トヨクモ開発本部インフラエンジニアの井上です。 AWS には CloudFormation というリソースの構築を自動化できるサービスがあります。 今回は CloudFormation を使って、堅牢な RDS ネットワークを構築してみたいと思います。 背景 方法 コード 使い方 スタックの作成 テンプレートのアップロード パラメータの入力 スタックオプションの設定 ステータス リソースの一括削除 説明 メタデータとパラメータ RDS サブネットとサブネットグループ 出力パラメータ まとめ 背景 日々データストアを運用していると、以下のようなことをやりたい場面が出てくるのではないでしょうか。 本番の RDS に対して、マイグレートやスクリプトの実行時間を検証したい 稼働中のEC2インスタンスからアクセスさせたくない 恒久的な構成ではなく一時的に作成、削除したい やり方は色々ある
開発本部の飯塚です。 業務で Babashka を使う機会を無理矢理作ってみたので、その副産物を公開してみます。 動機 CloudWatch Logs からログを抽出して調査したい AWS CLI を使ってもいいが、クエリの発行、クエリの完了待ち、結果取得が面倒 良い感じにラップしたスクリプトを用意して誰でも簡単に使えるようにしたい Clojure で!! Babashka Babashka は @borkdude 氏が開発している Clojure のコードを スクリプト として高速に実行できる環境です。 高速さの背景には GraalVM を利用したネイティブイメージ化があります。 これにより JVM 言語で度々話題にあげられるスタートアップタイムがほぼ無視できるくらいの速度で起動してくれるのが大きな特徴です。 $ time clojure -e '(+ 1 2 3)' 6 clojure
Vim/Neovim 向けに Clojure の開発環境を提供するプラグイン vim-iced を使って Clojure 開発環境の構築をしてみましょう。 なお vim-iced は個人的に開発している拙作の Vim プラグインで、実際に私が業務で(勝手に)利用しているという実績があります。 前提 ゴール やること Clojure 実行環境のインストール vim-iced のセットアップ vim-plug のインストール 各種プラグインのインストール iced コマンドにパスを通す サンプルプロジェクトの作成 REPL 駆動開発への入り口 REPL への接続 コードを評価してみる 変更内容を即座に確認する テスト駆動開発への入り口 テストの作成 ソースの修正 リンター/フォーマッター の設定 clj-kondo による静的解析の設定 cljstyle によるフォーマットの設定 vim-ic
これはClojure Advent Calendar 2019の21日目の記事です。 そして、こちらの記事の続きにもなっています。 tech.toyokumo.co.jp 本記事では、RingのMiddlewareについて解説していきます。 基本的に上記の記事を理解いただいた前提で話を進めていこうと思います。 Ring Middlewareについてなぜ解説が必要なのか Ring Middlewareとは何か Ring Middleware大全 URLに応じて適用する リクエスト・レスポンスをロギングする [開発用]スタックトレースを出力する X-Forwarded-For ヘッダからリクエスト元IPアドレスを取得する X-Forwarded-Proto ヘッダからプロトコルを判別する HTTPで来たアクセスをHTTPSにリダイレクトする HSTSに対応する X-Content-Type-O
北川です。 Clojure 始めました。 Clojure のお勉強をするにあたり何か良い題材はないかと探していたところ greglook/cljstyle というツールが目につきました。 以前からフォーマッターや linter の実装に興味があったということもあり、ちょうど良いのでこれを題材にお勉強を始めていきます。 コンテキスト不明なものをいきなり読んでも眠くなってしまいそうなので greglook/cljstyle のソースコードをそのまま抜粋するなどはしません。 しかし、この記事を読み終える頃には自分好みのコードフォーマッターを再実装できそうな気持ちになれます。*1 実際にcljstyleを使ってフォーマットをかけていく方法については、こちらの記事をご覧ください。 tech.toyokumo.co.jp フォーマット処理の流れ 例えば cljstyle check コマンドは以下の通
これはClojure Advent Calendar 2019 - Qiitaの二日めの記事です。nil punningが難しいなあと個人的に感じているので、なぜリッチヒッキーさんはnil punningを選択したのだろうか、nil punningが優れている点は何か、ということを調べて書こうと思います。調べていくうちに、いろんな考えがあるなあ、というような気持になることはできました。nil punningにも一長一短があり、実際リッチヒッキーさんも「確かに複雑ではある」とは言っていることはわかりました。オチのない記事になってしまいましたが大目に見てください。 nil punningとは何か 調べようと思ったきっかけ nil punning反対派のpuzzlerさん nil punning推進派のリッチヒッキーさん empty?の存在意義 書きたかったが書けなかったもの 参考にしたもの n
こんにちは。開発本部の @makinoshi です。 トヨクモではメインの開発言語としてClojureを採用しています。 Clojureの文法は簡潔でデータ型も少なく、比較的覚えやすい言語だと思います。 一方でWeb開発においては、Symfony/LaravelやRuby on Railsのような大きなフレームワークに乗るのではなく、 1つのことをうまくやるライブラリを組み合わせてアプリを作っていくという文化であるため、 それぞれを組み合わせていくための知識が必要になります。 その知識は一見すると膨大に思えるのですが、HTTPそのものの知識を除けば実は理解するのに必要な知識は少なく、RingのHandlerがどういうものなのか理解できれば、 ほぼ理解できたといって過言ではありません。 弊社では新卒で入社した方やアルバイトの学生さんなど、徐々にClojureを書く人が増えていることもあり、
こんにちは。トヨクモ開発部インフラエンジニアの井上です。 昨年第一子が生まれたので一ヶ月間の育休を取りました。 弊社での育休取得者第一号ということで、今回は育休について個人的な感想などを書いていきたいと思います。 育休に入る前の準備 育休中の取り組み 周りの反応 お金の話し 復帰後 所感 育休に入る前の準備 日頃の作業や、ネットワーク構成図、障害時対応などをドキュメントにまとめていきました。 ドキュメントを書く目的は、もちろん他のエンジニアと情報共有するためですが、気づきとして属人化されていた作業が見えたということが上げられます。 属人化して良いことは何もないので、今回のような機会に棚卸しできたのは良かったです。 「後でやる」タスクになっていた、スクリプトの改善だったり、使っていないサービスの削除や古いドキュメントの更新などはやっていて気持ちよかったです。 育休中の取り組み 僕はもともと夜
このページを最初にブックマークしてみませんか?
『tech.toyokumo.co.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く