サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
掃除・片付け
kaminashi-developer.hatenablog.jp
こんにちは。ソフトウェアエンジニアの坂井 (@manabusakai) です。 カミナシではマルチプロダクト化に向けて、認証・認可の切り出しを進めています。その対応を進める中で、既存テーブルへのカラム追加が必要になりました。 先日、そのリリースのために本番データベースにマイグレーションの ALTER 文を実行したところ、クエリが詰まって危うく障害になるところでした(幸いすぐにキャンセルして事なきを得ました)。 原因を調べたところ、オンライン DDL は複数の条件が関係することがわかりました。オンライン DDL に対する知識不足と事前検証の甘さゆえのミスでしたが、結果的には良い学びが得られました。 カミナシのバリューのひとつである「全開オープン」の気持ちで、事の顛末やそこから得た学びを公開します。 なお、今回の話は MySQL 5.7 互換の Amazon Aurora MySQL 2 で確
初めまして。株式会社カミナシPMの@gtongy1です。 Dockerというツール。SRE, Backend, Frontendどの領域のエンジニアも馴染みのあるツールではないでしょうか。 コンテナを利用することにより、インフラの環境を一つの空間に梱包し、その内部で柔軟に様々な環境を作ることが出来ます。 コンテナの実体とはなんなのでしょう? 叡智が詰め込まれたそんな一つの宝箱のように見えます。 「 コンテナ作ってみたくなりませんか? 」 僕と同じように知的好奇心をくすぐられたそこのあなた!コンテナ沼の一歩目を一緒に踏み出してみましょう! 検証環境 Ubuntu 18.04 golang 1.15 Dockerの機能おさらい docs.docker.com まず、ドキュメント内を読み進めてDockerに対する知識を整理します。 DockerはDocker daemonを基幹とし、その呼び出し
ソフトウェアエンジニアの 鈴木 (@szk3) です。 先日、カミナシにおいて古くから存在する1つの機能をリアーキテクティングしました。 その結果、処理時間は4分の1以下、コストは90%程度削減 と大きな成果を出すことができました👏 本記事では、その機能が抱えていた課題に対しどのような改善のアプローチをして上記の結果に結びついたのか?について共有します。 Excel変換とは 今回、リアーキテクティングの対象となった機能は、カミナシに帳票として記録されたデータをExcel形式に変換して出力する機能です。 これを、”Excel変換” と呼んでいます。 Excel変換は、カミナシのサービスの中でも比較的古くから存在する機能です。 ここ数年での利用ユーザーの増加と共に、設計当初のシステムアーキテクチャが技術的な負債となっている状態でした。 Excel変換の課題 まず最初に、設計当初のアーキテクチ
はじめに こんにちは。カミナシでソフトウェアエンジニアをしている佐藤です。 みなさんは、アプリケーションのフロントエンドから、Amazon S3 にファイルをアップロードするときに、どのような方法を用いているでしょうか? 「バックエンドのサーバーにファイルを送信し、バックエンドのサーバー経由で S3 にアップロードしている」「Presigned URL を払い出して、フロントエンドから直接 PUT している」など、いくつかの方法があると思います。 弊社で提供しているサービス「カミナシレポート」でも、用途に応じて上記の方法を使い分けて S3 へのファイルのアップロードを行っています。 特に、Presigned URL は、手軽に利用できる上に、バックエンドのサーバーの負荷やレイテンシーの削減といったメリットも大きく、重宝しています。 一方で、その手軽さの反面、アップロードに際して様々な制約を
こんにちは。ソフトウェアエンジニアの坂井 (@manabusakai) です。 今月でカミナシに入社してちょうど 1 年が経ちました。前職では 6 年間 SRE チームにいたのでプロダクト開発はブランクがありましたが、さまざまな挑戦をさせてもらっていたらあっという間に 1 年が経っていました。 カミナシのエンジニアリング組織もこの 1 年で急拡大しており、入社当初から比べると正社員のエンジニアも倍以上に増えました。 GitHub の権限管理、どうしていますか? ところで、みなさんが所属されている組織ではどのように GitHub の権限管理を行なっていますか? カミナシではつい先日まで、ほとんどのエンジニアが Organization の Owner 権限を持っていました。理由は、メンターになったエンジニアがニューカマーのユーザーを招待していたからです。 しかし、統制が取れていないことでいく
こんにちは。カミナシにて業務委託としてフロントエンドを担当している田村(@junkboy0315)です。皆さんはフロントエンドのテスト、どのように取り組んでいますか?フロントのテストはなかなか難しいですよね。 バックエンドのテストには、「入力、出力、永続化されたデータ」の3つを検証するという基本セオリーがあります。しかし、フロントエンドのテストは、その粒度や手法が多様で、とっつきにくいと感じる方も多いのではないでしょうか。 カミナシでもフロントエンドのテストは以前は十分とは言えない状態でしたが、これまで継続的に改善を重ねてきました。今回は、その変遷についてお話ししようと思います。 夜明け前 カミナシのコードベースでは、元々ユニットテストがある程度整備されていました。これらは主に複雑な計算処理を行い結果を返す関数などに対して実施されていました。 しかし、画面全体の機能を網羅する包括的なテスト
こんにちは。ソフトウェアエンジニアの坂井 (@manabusakai) です。 カミナシでは RDB に Amazon Aurora MySQL 2(MySQL 5.7 互換)を使っています(以下 Aurora MySQL と略します)。 ある日、社内の Slack で「𠮷」などの文字列が登録できないのではないかという話が出ました。これを聞いて「あー」と思った方も多いでしょう。 MySQL で有名な UTF-8 の 4 バイト文字問題で、歴史的な理由から MySQL 5.7 以前では utf8 の文字セットは utf8mb4 ではなく utf8mb3 を指しています。 dev.mysql.com カミナシのアプリケーションは 4 バイトの文字列が入力された場合はシステムエラーを返す実装になっていますが、エラーの内容をユーザーにわかりやすく伝えることは難しいためユーザー体験としても良くない
こんにちは、カミナシの浦岡です。 最近、弊社のメンバーとしてUIデザイナーが新たに加わり、プロダクトのUI改善を進めています。 以前は、AntDesignなどUIライブラリーのコンポーネントをそのままプロダクトで使用する機会が多かったのですが、UI改善を行う上で、UIライブラリーそのままでは要件を満たすことが困難なケースも出てきました。 その結果、独自のReactコンポーネントを実装する機会が増えているのですが、 この記事では、その独自コンポーネントを「ヌルヌル動く」仕上がりにするために気をつけている点を架空の題材を使って書きます。 題材 今回、「空を舞うカレンダー」(ペルソナ5風!?)のUIがデザイナーから提示されたと仮定して進めます。 極端な題材ですが、UIライブラリのカレンダーをベースには実現できそうにないので、独自コンポーネントとして作りましょう! 先に、ヌルヌル動かす上で気をつけ
こんにちは。ソフトウェアエンジニアの坂井 (@manabusakai) です。 カミナシのプロダクトは、管理者の方が使う Web アプリに React、現場の方が使う iPad / iPhone アプリに React Native を採用しています。 どちらもフロントエンドの技術スタックを採用していることもあり、先日までは Monorepo と Yarn Workspaces の構成で運用されていました。 最近では Monorepo 化を進めている事例もよく見かけるようになってきました。 engineering.mercari.com devblog.thebase.in ですが、カミナシでは Monorepo をやめてリポジトリ分割をする意思決定を行いました。 具体的には、harami_client という Monorepo を harami_web と harami_mobile とい
こんにちは、株式会社カミナシのエンジニア @imu です。 はじめに 2021年11月に以下の開発者ブログを公開しました。 kaminashi-developer.hatenablog.jp α版として構築したインフラですが、2022年1月にインフラ移行の話が突如検討されました。 なぜ最終的にAWSへ移行になったのかと私が何を感じたのかをお話します! 補足 完全移行したのはAPIサーバーです。クライアントアプリはCloudBuild + Firebase Hostingの環境が残った状態です。 移行後のAWS構成図はここでは共有していません。また別の機会に。 GCPを否定する記事ではありません。 本記事で様々なコメントを頂いておりますが、追加で補足をさせてください。 記事内の「私がGCPを選択した理由」で、私個人が勝手な意思決定をしてGCPを選択したように受け止められてしまう書き方でした。
こんにちは、デザインエンジニアのショウです。 突然ですが、UI/UX デザインにおいて、「楽観的な更新」という言葉を聞いたことがありますか?あまり聞いたことがなくても、実は日常にたくさん存在しています。 例えば、 twitter や facebook のいいねボタン。いいねをタップした直後に色がつくのですが、実はサーバーへのリクエスト送信と UI 上のいいねの色付きが同時に発生しています。つまりサーバーからの通信結果待たずに UI を更新しています。 他に、trello でタスクカードを隣の列に移動したり、iMessage や Facebook メッセンジャーでのメッセージの送信、Kindle アプリで途中までしかダウンロード出来てない本が読めることなども楽観的な更新です。 図:楽観的な更新を採用しない時と採用した時のメッセージ送信のUI (引用元) 楽観的な更新の意義 早くも 1968
初めまして。株式会社カミナシPMの@gtongy1です。 みなさんはNewSQLをご存知ですか? 強い整合性を持つ分散型のSQLデータベースサービスのことをNewSQLと呼びます。 RDBMSではなし得なかった分散アーキテクチャを、またNoSQLではなし得なかった強い整合性をいいとこ取りした新しいSQLデータベースサービスです。 なんかとても理想的な仕組みに見えますね。この裏にはどのような知識が詰め込まれているのでしょうか。 今回はそんなNewSQLを支える仕組みを一緒に紐解いていきましょう! NewSQLが乗り越えた壁 どんな仕組みが動いているのか、の前にNewSQLはこのSQLデータベース界へ何を投げ込んだのでしょうか。 NewSQLには以下のような特徴があります。 SQL-Likeなクエリ言語のサポート 強い整合性 ACIDサポートのトランザクション NewSQLの有名所であるCoc
こんにちは、株式会社カミナシのエンジニア @imu です。 はじめに 私はインフラに対して苦手意識(詳しく知らない)があり、issueに対して率先して改善しようとしませんでした。このまま深く触ることはないかなと思っていた矢先、新規プロダクトのインフラ構築をお願いされました。 めちゃくちゃ不安しかなかったのですが、最初から構築する機会なんて滅多にないのでチャレンジすることに! (内心はやりたくないなと思ったけど…) 私自身は知らない領域にチャレンジすることは好きなので、楽しんでやろうと思いました。 苦手意識がある私がどのように、リリースできる環境を構築したか共有できればと思います! 注意)本内容はα版という位置づけで構築しており、正式リリース時には都度変更をしていきます。 Day 1(技術選定) 弊社はカミナシレポートというサービスを提供しています。このプロダクトはAWSを利用しており、その
こんにちは。ソフトウェアエンジニアの坂井 (@manabusakai) です。 10 月の終わりに、ひとつだったエンジニアリングチームを分割する形で 2 チームが生まれました。社内では骨 🦴 と稲 🌾 という愛称で呼ばれています。 ちなみに、骨 🦴 の由来はこちらです。 今週から新しいチームが始動するのですが、チーム名は「骨」になりました🦴 英語の "hone" は「磨きをかける」という意味があるので、骨太でしっかりしたシステムを作り磨きをかけるという願を懸けました✨ pic.twitter.com/Gvf2VBYk7d— Manabu Sakai (@manabusakai) 2022年10月25日 前職でチームの立ち上げやスクラムを経験していたこともあり、CTO から骨 🦴 チームのスクラムマスターを任されました(専任ではなくエンジニアと兼任です)。 チームの立ち上げから 1
こんにちは。カミナシ ソフトウェアエンジニアのAomanです。 最近ちょこちょこアルゴリズムやデータ構造、Goのキャッチアップしています。 そんな中、go.devのブログ Go blog のとある記事でダブルポインタを使用するコードに出会いました。筆者は今まで、RubyやJavaScript/TypeScriptなどの言語を多く触っていたためか、お恥ずかしながらダブルポインタを使うコードを初めて見たので「なんなのだこれは…」と戸惑いました。本記事ではそんなダブルポインタが使われていたコードについて、簡単にご紹介したいと思います。 そもそもダブルポインタとは? その名の通りポインタのポインタのことなのですが、わからない方は下記の記事がわかりやすくまとまっており参考になると思います。 daeudaeu.com ダブルポインタと聞いて、まずはじめに思った感想は「そんなもの必要?」です。今まで使っ
こんにちは。ソフトウェアエンジニアの坂井 (@manabusakai) です。 カミナシでは職能別のチーム分けをしておらず、エンジニアのロールは基本的に全員ソフトウェアエンジニアです。フロントエンドやバックエンドにとどまらずインフラやセキュリティも含めて、サービス開発チームがすべてを担っています。 CTO の言葉を借りるなら「システムのライフサイクル全体を見る」のがカミナシにおけるソフトウェアエンジニアであり、単一のチームで顧客への価値提供ができる体制を目指しています。 type.jp しかし、個々人のスキルマップを見るとインフラ領域を得意とするメンバーが少なく、インフラの改善は後回しになっていました。 私は前職で 6 年ほど SRE として働いていたので、入社時点からインフラの改善にも着手しなければと感じていました。しかし、専任チームが存在しないカミナシでの取り組みは、まさに試行錯誤の連
こんにちは、カミナシでソフトウェアエンジニアをしている 佐藤 と申します。 弊社で開発・提供しているノンデスクワーカー向けプラットフォーム「カミナシ」(以降「カミナシレポート」や「弊社アプリケーション」と呼びます)において、Feature Flags の仕組みを整備し、デプロイとロールアウトの分離を加速させたことについてご紹介したいと思います。 登場する技術 Amazon Elastic Container Service (ECS) AWS AppConfig AWS AppConfig agent 前提知識 後半の「技術的な話」以降の部分は、以下の技術についても触れています。 Feature Flags、Feature Toggles AWS AppConfig Amazon Elastic Container Service (ECS) Terraform 「背景」や「解決策」といっ
こんにちは。カミナシ ソフトウェアエンジニアの @aoman です。 つい先日、Goで有名な@tenntennさんがConnpassで募集していたGopher塾#2に参加させていただきました。 tenntenn.connpass.com 大変勉強になりおすすめです!筆者が参加したのは第一回目ですが、二回目三回目と予定されているようなので、有料講義ではありますが気になる方はぜひ参加してみてください!学生さんであれば無料の抽選枠もあります。 その際に紹介されていたコードで、エラーのラップ関数があったのですが、これが「メッチャアタマイイ!!スタイリッシュ!!」と感動しました。そのコードは、Goの公式ページである https://go.dev/ のWebサイトを実装しているリポジトリ pkgsite 内の internal/derrors パッケージで実装されています(GitHubリポジトリはミラ
はじめまして、株式会社カミナシのエンジニア @tomiです。 カミナシは、2020年10月にサービスサイトをフルリニューアルしました。 kaminashi.jp 今回のサイトリニューアルでは、どのような構成で作ったのか、また技術選定で考慮した点をお伝えします。 Jamstackな静的サイト構成 Gatsby.jsとWordpressを使いJAMstack構成で作成しました。 最終的に以下の画像のような構成になりました。 利用した技術を並べると、 Gatsby.js Typescript StyledComponents GraphQL EsLint + Prettier Wordpress + Gutenberg Netlify 導入事例やセミナー情報など、動的な情報は記事としてWordpressに登録し、Gatsby.js側で記事をGraphQL経由で取得して表示しています。 静的なファ
こんにちは。カミナシでソフトウェアエンジニアをしているaomanです。 私のエンジニアとしての経歴はカミナシが2社目で、前職も含めフロントエンドからバックエンドまで一通り開発はしていました。ですが、AWSなどインフラに関しては、アプリケーション開発時必要になったところを少し触ったりするくらいで、ガッツリと本格的に学んだことがありませんでした。 そんな私ですが、今回ECS Clusterの切り替え作業を先輩エンジニア監修の元一緒に行う機会をいただきました。どのようなことをしたのか、簡単にではありますがご紹介させて頂こうと思います! ざっくり概要 カミナシのサービスでは、APIサーバーの運用にAmazon ECS(on Fargate)を利用しています。また、APIサーバーコンテナの他にいくつかのコンテナが起動しています。以下がざっくりとした図になります。1つのTask定義があり、4つのコンテ
こんにちは!カミナシでソフトウェアエンジニアをやっているくらさわです! 今回は社内でゆるめに輪読会をやってみた話をブログにしてみました! どうぞご覧ください! 輪読会のきっかけ 読む本の選定について 輪読会の進め方 輪読会の結果と反省 まとめ 輪読会のきっかけ きっかけは僕が最近積読本が増えてきたからなんとかしたいな〜、社内で輪読会でも開いたら無理やり読むようになるかな〜みたいな軽い気持ちで Slack の個人部屋 (いわゆる times ) で呟いたのが始まりでした。 そしたら何人かリアクションくれたので、その場で本の候補を募ってみました。 そんな雑な感じで始めた輪読会ですが、僕の中では二つの目的がありました。 僕の読書習慣をつける 複数チームでまたがって技術的な議論や雑談をする場を作る 1 はかなり自分本位な目的です笑 2 はカミナシでは、少し前にチーム分割により、チームが別れ、雑にチ
こんにちは、株式会社カミナシのエンジニア @imu です。 はじめに 我々のサービス『カミナシ』をローンチしてから、今年の夏で丸2年を迎えます。 私は『カミナシ』のプロダクト開発初期メンバーの1人でした。当時会社の残りランウェイ(残資金で運営できる期間)が極端に短いという厳しい時間的制約のなかで高速にプロダクトを作り上げたことを誇りに思う一方、その代償としての技術的負債は今も解消しきれずに残っています。 継続的に寄せられるお客様からの機能開発要望や、ユーザー数が増えた結果発生しはじめた不具合への対処に時間をとられ、それら技術的負債の根本的な解消には、これまで会社として注力することができていませんでした。今年に入ってから既存ユーザーにも影響が出てしまうような問題の発生が徐々に目立ちはじめています。 この状況をカイゼンすべく、私たちはバックエンドの技術的負債を解消する第一歩を踏み出しました。
はじめまして。株式会社カミナシでアプリケーションエンジニアをやってる keinuma です。 カミナシではAPIの開発にGo言語を使用しています。自分はGraphQLが好きなのですがこれまでGoのライブラリを利用してGraphQLランタイムを実装したことがありませんでした。なのでGoのライブラリの一つであるgqlgenを利用してサンプルアプリケーションを実装してみました。 今回は勉強会で発表した内容を編集して書いていきます。 speakerdeck.com ※ただし書き カミナシのプロダクトではGraphQLを使っていません。 サービスサイトではGatsbyを使っていてこちらについてのまとめは後日公開予定です。 GraphQLの実装手段 BaaS GraphQLはクライアントの柔軟性が高い分、ランタイムが複雑になりがちです。 そのため実装するときはGraphQLランタイムをBackend
こんにちは、株式会社カミナシのエンジニア @imu です。 はじめに 突然ですがファイルアップロードに失敗することってありますよね? カミナシレポートのプロダクトはオフライン機能を実装しており、オフラインで記録したデータをアップロードしたときに失敗するケースが、特定の条件下で起きるようになりました。そのため一部のお客様のデータが端末に残り続け、なんとかしてほしいとサポート依頼が発生しておりました。 私自身、半年ぶりにカミナシレポートのプロダクトに戻ってきたばかりで、リハビリのissueとなりました(笑) 今回は問題を解決するまでの仮説や、調査から解決までお話したいと思います! ※オフライン対応をなぜしているのかは以前書いたこちらを参照いただければと思います。 kaminashi-developer.hatenablog.jp 結論 何が問題だったか結論だけ知りたい方はこちらへ 開発環境 g
はじめに こんにちは、カミナシ社でソフトウェアエンジニアをやっている浦岡です。 我々は「ノーコードでユーザー独自の現場アプリを作成できる」サービスを開発しています。 そのサービスのフロントエンドの開発にはReact×Reduxを使っているのですが、 サービス特性のため「Reduxのstateがファットになりがち」であったり「コンポーネント間のデータの依存関係が多くなりがち」といった状態に陥ります。 その結果、アプリの反応速度が遅くなりがちです... この記事では、上のような状態に陥った「React×Redux」アプリの高速化の一例をサンプルアプリを用いて説明します。 サンプルアプリについて 今回、Reduxのチュートリアルにあるカウンターアプリを改良し、下のような「モンスターの捕獲記録」アプリを作ります。 サンプルアプリについて Version1(コンポーネントをブルブルさせてみる) まず
こんにちは、セキュリティエンジニアリングの西川です。息子が8歳なのですが、生まれてからずっと可愛いままで、いつまでこの可愛さは続いてしまうのでしょうか。 ということで、今日はセキュリティの文化の作り方について話をしていこうと思います。 セキュリティの文化の作り方ってなんなんだろう と言いますか、日々私自身、手探りなのですが、今日は取締役CTOの原トリ(以下トリ)からもらった金言とともにカミナシにおけるセキュリティの文化の作り方について書いていきたいと思います。 カミナシにおけるセキュリティの文化の定義 その前にセキュリティの文化を定義していかなければスタートラインにすら立てないわけですが、カミナシにおいては、セキュリティの問題をセキュリティ担当者の介在なしに、自分たちで気付き、セキュリティの問題をお互い注意し合えるようになるという定義を行っています。これは開発だけではなく、コーポレートでも
こんにちは!カミナシでソフトウェアエンジニアをやっているくらさわです! 今回は元々、サーバサイドをメインに開発していた私が、カミナシでモバイルアプリの開発に取り組んでみた話を書きたいと思います! カミナシのチームについて React Native について Expo について 超入門 やってみた感想 終わりに カミナシのチームについて カミナシのプロダクト開発では「単一のチームで顧客への価値提供が可能な体制をとる」という思想のもと、フロントエンド、バックエンド、インフラストラクチャーなどの技術的スタックでチームを分けることはしておりません。 参考記事: type.jp そのため、各個人では得意、不得意はありつつも、チームとしては全ての領域を担当しています。 フロントもサーバもインフラも手を出したいタイプの人にとってはめっちゃいい環境だと思います!おすすめです! そんな環境なので、私もずっと
7月に株式会社カミナシに入社したくらさわです! カミナシでは、現場DXプラットフォーム「カミナシ」の開発をしています! よろしくお願いします!!! きっかけ 検証バージョン 結論 コード書いて確認してみた ドキュメント読んでみた コード読んでみた go-sql-driver/mysql のコード GORM のコード まとめ きっかけ 現在、カミナシの開発では、サーバサイドの言語は Go 、ORマッパーとして 「GORM」 を使い、DB には Amazon Aurora MySQL を使っています。 ある日、開発中に GORM が吐いてくれるログで query を調べていると、アプリケーションの実行中は結果が取れていないのに、その query をコピーして、手動で MySQL に投げると結果が取得できるということがありました。 パッとわからなかったので、それについて調べたことを記事にしてみま
こんにちは、カミナシの@tomiです。 React Native + Expoで開発する上で、React Native Debuggerが自分にとって必須のものとなっています。 このツールを使って日々どういった感じで開発しているかをまとめました。 他にもReactotronやReact Native Toolsなどのデバッグツールもありますが、私は様々な情報をまとめて確認できるReact Native Debuggerに落ち着きました。 スタイルの検証やpropsのデバッグ、Reduxのstate確認にactionの発火確認などができ、開発する上で欲しい要素全てが揃っています。 Expoの標準デバッガーへの不満 Expoに標準で搭載されているElement Inspectorでは、選択した要素のスタイルの確認はできますが、プロパティの変更をしたり、コンポーネントが持っているstateやpr
次のページ
このページを最初にブックマークしてみませんか?
『kaminashi-developer.hatenablog.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く