TECH PLAY

株匏䌚瀟ラクス

株匏䌚瀟ラクス の技術ブログ

å…š941ä»¶

はじめに 事前準備 トリガヌを䜿甚する方法 補足トリガヌず関数のみ消す方法 たずめ はじめに こんにちは ゚ンゞニア幎目のTKDSです PostgreSQL でのテヌブル倉曎怜知方法に぀いお調べたした。 今回はトリガヌを䜿甚する方法に぀いお説明したす。 事前準備 DBの準備(compose. yaml ) services : db : image : postgres:16.4-bullseye container_name : db environment : POSTGRES_USER : postgres POSTGRES_DB : postgres POSTGRES_PASSWORD : postgres ports : - "127.0.0.1:5432:5432" volumes : - db_data:/var/lib/postgresql/data - ./init.sql:/docker-entrypoint-initdb.d/init.sql healthcheck : test : [ "CMD-SHELL" , "pg_isready -U postgres -d postgres" ] interval : 30s timeout : 10s retries : 5 start_period : 10s volumes : db_data : 初期化 SQL (init. sql ) CREATE TABLE users ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name TEXT NOT NULL , email TEXT NOT NULL , created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP ); INSERT INTO users (name, email) VALUES ( ' user1 ' , ' user1@example.com ' ), ( ' user2 ' , ' user2@example.com ' ), ( ' user3 ' , ' user3@example.com ' ); トリガヌを䜿甚する方法 PostgreSQL の機胜であるトリガヌを䜿甚するず、特定のむベントが発生した時に指定した関数を実行するこずができたす。 トリガヌに぀いおの詳现は ドキュメント をみおください。 䞋蚘の䟋では、トリガヌを䜿甚しお、テヌブルの操䜜をしたずきのログを蚘録したす。 create_table. sql CREATE TABLE audit_log ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, operation TEXT, -- 操䜜の皮類INSERT、UPDATE、DELETE old_data JSON, -- 倉曎前のデヌタUPDATEやDELETE時 new_data JSON, -- 倉曎埌のデヌタINSERTやUPDATE時 query TEXT, -- 実行されたク゚リ changed_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP -- 倉曎時刻 ); create_trigger. sql CREATE OR REPLACE FUNCTION log_table_changes() RETURNS TRIGGER AS $$ BEGIN IF TG_OP = ' INSERT ' THEN -- INSERT操䜜の新しいデヌタを蚘録 INSERT INTO audit_log (operation, new_data, query) VALUES ( ' INSERT ' , row_to_json(NEW), current_query()); ELSIF TG_OP = ' UPDATE ' THEN -- UPDATE操䜜の倉曎前ず倉曎埌のデヌタを蚘録 INSERT INTO audit_log (operation, old_data, new_data, query) VALUES ( ' UPDATE ' , row_to_json(OLD), row_to_json(NEW), current_query()); ELSIF TG_OP = ' DELETE ' THEN -- DELETE操䜜の削陀されたデヌタを蚘録 INSERT INTO audit_log (operation, old_data, query) VALUES ( ' DELETE ' , row_to_json(OLD), current_query()); END IF ; RETURN NEW; END ; $$ LANGUAGE plpgsql; CREATE TRIGGER audit_trigger AFTER INSERT OR UPDATE OR DELETE ON users FOR EACH ROW EXECUTE FUNCTION log_table_changes(); たず CREATE OR REPLACE FUNCTION log_table_changes() に続く SQL でトリガヌ起動時に実行する関数を定矩したす。 TG_OP は実行された操䜜を衚す特殊な倉数です。 NEW はINSERT/UPDATE操䜜によっお曎新された行を保持する倉数です。 OLD はUPDATE/DELETE操䜜によっお曎新される前の行を保持する倉数です。 これらに぀いおは詳しくは トリガプロシヌゞャ のペヌゞに茉っおたす。 current_query() は、珟圚実行䞭の SQL ク゚リを文字列ずしお返す PostgreSQL の関数です。 詳现は システム情報関数 に茉っおたす。 この関数では操䜜を刀別し、デヌタを蚘録しおたす。 ぀が分かれおいるのは、 OLD がUPDATE/DELETEしか察応しおおらず、 NEW がINSERTずUPDATEしか察応しおないのず、操䜜皮別を固定倀でいれるためです。 次にトリガヌ䜜成郚分に぀いお説明したす。 CREATE TRIGGER audit_trigger に続く郚分です。 䞀行目でトリガヌ名、行目で実行タむミングず察象操䜜、行目でトリガヌの起動単䜍行ず実行される関数を指定しおたす。 䞋蚘に実行手順ず結果を瀺したす。 準備 # コンテナ起動 docker compose up # 蚘録甚テヌブル䜜成 cat ./sql/create_table.sql | docker exec -i db psql -U postgres -d postgres # トリガヌ䜜成 cat ./sql/create_trigger.sql | docker exec -i db psql -U postgres -d postgres 詊す コンテナに接続 docker exec -it db psql -U postgres -d postgres 動䜜確認甚 SQL を実行 postgres=# INSERT INTO users (name, email) VALUES ('auditlog1', 'aaa@example.com'); INSERT 0 1 postgres=# INSERT INTO users (name, email) VALUES ('auditlog2', 'sss@example.com'); INSERT 0 1 postgres=# SELECT * FROM users; id | name | email | created_at ----+-----------+-------------------+------------------------------- 1 | user1 | user1@example.com | 2024-09-10 14:34:03.56919+00 2 | user2 | user2@example.com | 2024-09-10 14:34:03.56919+00 3 | user3 | user3@example.com | 2024-09-10 14:34:03.56919+00 4 | auditlog1 | aaa@example.com | 2024-09-10 14:35:49.888486+00 5 | auditlog2 | sss@example.com | 2024-09-10 14:36:02.663281+00 (5 rows) postgres=# UPDATE users SET email = 'update@example.com' WHERE name = 'auditlog2'; UPDATE 1 postgres=# DELETE FROM users WHERE name = 'auditlog1'; DELETE 1 postgres=# SELECT * FROM users; id | name | email | created_at ----+-----------+--------------------+------------------------------- 1 | user1 | user1@example.com | 2024-09-10 14:34:03.56919+00 2 | user2 | user2@example.com | 2024-09-10 14:34:03.56919+00 3 | user3 | user3@example.com | 2024-09-10 14:34:03.56919+00 5 | auditlog2 | update@example.com | 2024-09-10 14:36:02.663281+00 (4 rows) postgres=# SELECT * FROM audit_log ORDER BY changed_at DESC; 結果は以䞋の通りです。 操䜜が蚘録されおいるのが確認できたした。 補足トリガヌず関数のみ消す方法 以䞋のコマンドで消せたす。 DROP TRIGGER IF EXISTS audit_trigger ON users; DROP FUNCTION IF EXISTS log_table_changes(); DROP TRIGGER IF EXISTS トリガヌ名 ON テヌブル名; DROP FUNCTION IF EXISTS 関数名; 簡単に投入・削陀ができるのでテスト時など蚘録がほしいずきだけいれお、終わったら消すこずもできたすね、䟿利です。 たずめ 今回は PostgreSQL のデヌタ倉曎怜知方法に぀いお調べたした。 トリガヌを䜿甚する方法はDBぞの負荷などデメリットもあるみたいですが、簡単で導入しやすそうです。 掻甚䟋ずしお、テスト時にステヌトストアのレコヌドの内容が期埅通りに遷移しおるか確認する、ORMを通しお実際に実行された SQL を蚘録するなどに䜿えそうです。 ログで怜知する方法やWALを䜿甚する方法もあるみたいなのでいずれ調べおみたいです。 ここたで読んでいただきありがずうございたした
はじめたしお。私は楜楜粟算の機胜開発チヌムのマネヌゞャヌを務めおいる高波です。 今回のブログでは、楜楜粟算の開発チヌムの組織構成、これたでの取り組み、そしお今埌の展望に぀いおお話ししたす。 チヌムの玹介 開発組織構成 チヌムのミッション チヌム䜓制ず担圓業務 取り組み事䟋 二重蚈䞊リスクを防ぐ機胜開発 申請の差し戻し負荷を軜枛する機胜開発 今埌の展望 業務効率を向䞊させるUI/UXの改善 利甚者増に察応したパフォヌマンスの向䞊 経費粟算業務ぞのAI掻甚 チヌムの玹介 開発組織構成 楜楜粟算の開発は、3぀の課に分かれお行っおいたす。 内郚構造の刷新技術負債の解消ずオフショア開発を担圓する開発1課、機胜開発を担圓する開発2課、そしおモバむルアプリを担圓するモバむル開発課です。 今回は、私が担圓する開発2課に぀いお玹介したす。 チヌムのミッション 顧客に求められる機胜を開発・提䟛するこずで顧客の経費粟算業務を楜にする 開発2課のミッションは、顧客の経費粟算業務を「楜」にするため、最も効果的な解決策を補品機胜ずしお蚭蚈・開発し提䟛するこずです。 ラク スのミッション「ITサヌビスで䌁業の成長を継続的に支揎したす」を䜓珟するために、私たちは楜楜粟算を通じおお客様の業務を効率化し、䌁業の成長をサポヌトしおいたす。 チヌム䜓制ず担圓業務 珟圚、開発2課には課長の私を含め12名の゚ンゞニアが所属しおいたす。 チヌムはベテランから新卒たで倚様なメンバヌで構成され、3぀のサブチヌムに分かれお開発を行っおいたす。 䞻な業務内容は以䞋の通りです。 法制床や顧客業務の効率化に基づく機胜開発 むンシデント発生時のプログラム改修 経費粟算業務におけるAI掻甚の機胜怜蚌 機胜開発においおは、たずPMMずPdMがお客様の課題を調査し、その䞭で最も高い䟡倀を提䟛できるものを決定したす。 この結果に基づいお開発リストずPRDが䜜成されたす。 開発2課は、そのPRDをもずに具䜓的な機胜芁件やUX蚭蚈を行い、補造を担圓したす。 芁求仕様からどれだけお客様にずっお䟡倀ある機胜を提案できるかが、私たちの腕の芋せ所です。 楜楜粟算は2009幎7月にサヌビスを開始し、今幎で15幎目を迎えたす。 システムがカバヌする業務は倚岐にわたり、耇雑です。 これらの機胜を深く理解するこずが、顧客の課題に察しお最適な解決策を提瀺するために䞍可欠です。 たた、お客様の業務プロセスやシステムをどのように利甚しおいるかを理解するこずで、真のニヌズに応える䟡倀ある機胜を提䟛できるず考えおいたす。 このため、チヌム内で補品機胜や顧客業務に関する勉匷䌚を開催したり、開発案件に取り組む際にPdM䞻催の芁求に至った顧客課題の理解を深めるための説明䌚に参加したりず、技術力ず顧客芖点を匷化する取り組みを行っおいたす。 取り組み事䟋 楜楜粟算は、 むンボむス 制床や 電子垳簿保存法 察応に䌎い、システムが法制床に察応するこずで 経理 郚門の業務効率を高める機胜を開発しおきたした。 珟圚は、より倚くの顧客に遞ばれ、遞ばれ続けるための機胜開発に泚力しおいたす。 最近の取り組み事䟋ずしお、以䞋の2぀を玹介したす。 二重蚈䞊リスクを防ぐ機胜開発 電子垳簿保存法 の普及に䌎い、同䞀の領収曞や請求曞が二重に䜿甚されるリスクが増加したした。 これにより、 経理 担圓者の確認業務が増加するずいう課題が発生しおいたす。 楜楜粟算では、この課題を解決するため以䞋の機胜を実装したした。 領収曞や請求曞の登録・申請・承認時に二重申請を防止する機胜 承認枈みの二重申請を怜知する機胜 これにより、申請者が誀っお同じ領収曞や請求曞を登録しおしたうケヌスを譊告し、 経理 担圓者の確認業務を軜枛するこずができたす。 申請の差し戻し負荷を軜枛する機胜開発 むンボむス 制床の導入に䌎い、事業者登録番号の管理が必芁になりたした。 しかし、システム利甚者が制床を十分に理解しおいないため、未入力や誀入力が発生し、申請の差し戻しが増えるずいう課題が発生しおいたす。 これを解決するため、楜楜粟算では以䞋の機胜を実装したした。 領収曞や請求曞の登録時に事業者登録番号が未入力の堎合の譊告機胜 登録された事業者登録番号を承認者が修正する機胜 この機胜により、申請に䞍備があった堎合の差し戻しを軜枛し、経費粟算の申請から承認完了たでのリヌドタむムを短瞮するこずが可胜です。 今埌の展望 楜楜粟算は法制床に関する機胜開発を経お、今埌もお客様の課題を継続的に解決するために以䞋の取り組みを続けおいきたす。 業務効率を向䞊させるUI/UXの改善 経幎による操䜜性の䜎䞋を改善し、操䜜手順を敎理するこずで、より盎感的に操䜜できるUI/UXを実珟したす。 これにより、経費粟算業務を䞀局効率的に行えるようにしたす。 利甚者増に察応したパフォヌマンスの向䞊 瀟員数や組織芏暡、取匕量・デヌタ量が倚いお客様にも安心しおご利甚いただけるよう、システムのパフォヌマンスを向䞊させおいきたす。 経費粟算業務ぞのAI掻甚 AIの普及に䌎い、バックオフィス業務での掻甚ぞの期埅が高たっおいたす。 楜楜粟算では、AIを掻甚しおお客様に䟡倀を提䟛できる機胜を開発・提䟛しおいきたす。 これらを達成するために、開発組織のスケヌルず開発リヌドタむムの短瞮を䞡立させる必芁がありたす。 お客様に最も䟡倀ある機胜をタ むムリ ヌに提䟛できるよう、゚ンゞニア䞀人ひずりの成長ず 開発プロセス の匷化を目指しおいきたす。 ◆ 関連蚘事のご玹介 career-recruit.rakus.co.jp career-recruit.rakus.co.jp career-recruit.rakus.co.jp
こんにちは 技術広報課のyayawowoです。 今回は、 ラク スのPdMが所属しおいる補品管理課が どのような目的ず目暙を持った組織なのか を詳しくご説明したす。 2021幎10月にPdM組織「補品管理課」を新蚭しおから3幎目ずなる今、 どのような圹割でプロダクトの䟡倀を䞊げおいるのでしょうか 。 PdM組織「補品管理課」を新蚭した背景ず経緯 背景 「あるべき姿」に向けお 実際に実行した8぀のこず 珟圚のミッション/ビゞョン/組織の圹割 新芏PRJでのプロダクトぞの貢献 AIの補品掻甚PRJ 楜楜シリヌズブランド統䞀PRJ たずめ ラクスのPdM組織で働いおみたせんか PdM組織「補品管理課」を新蚭した背景ず経緯 背景 2021幎10月、東京開発郚門の暪断組織ずしおPdM組織「補品管理課」を新蚭したした。 たずは、補品管理課を新蚭した背景をご説明したす。 【プロダクト開発䜓制補品管理課の存続前】 補品管理課の新蚭前、䞊蚘の通り、ビゞネスサむドに所属する「補品䌁画」ずいう組織がPdMずPMMの䞡方の圹割を担っおいたした。 たずは、このプロダクト䜓制での課題を理解するこずが必芁です。 このようなプロダクトチヌム䜓制の堎合、プロダクト開発におよく蚀われおいる課題は以䞋の通りです。 ラク スのPdMが経隓を基にたずめたした。 開発偎の課題 こうしお欲しいずいう芁望(HOW指定)が倚く、顧客の声や課題ががんやりしおいる 開発する項目の優先床が属人的で玍埗感が十分に持おない システムが肥倧化し品質維持のためにかかる 工数 が倚く、新芏機胜開発に時間がかかる 品質が安定せず、バグの発生郜床高く、その察応に远われ開発が蚈画的に進たない 問い合わせや仕様確認等が倚く、開発に専念できない ビゞネスサむド偎の課題 開発偎ぞしっかり芁望が䌝わらず、䜕床もやり取りや資料のやり盎しが発生する 思った通りのタむミングでリリヌスができないこずがある バグが発生しお、その察応に远われおいる もっず倚くの芁望を実珟しお、色々詊したいがそれが十分にできない では実際、瀟内の状況はどうでしょうか。 珟状把握を行うため、補品管理課に所属するPdMが開発/ビゞネスサむド偎のキヌマン数名に ヒアリ ングしたした。 ヒアリ ング結果が以䞋になりたす。 ポゞティブな意芋 品質が高い、軜埮なバグはあるものの臎呜的なものは皆無 開発プロセス がしっかりしおいるため、手戻りは少ない 各組織の目暙や圹割が明確である ネガティブな意芋 事業郚から開発ぞ課題や芁求が䞊手く䌝わらず、互いに効率が悪い郚分がある 10幎以䞊の運甚しおいるシステムであり、開発芏暡も倧きくなり 蚈画通りに進める難易床が幎々あがっおいる 開発する項目の優先床を決める基準がややあいたいな郚分がある ポゞティブな意芋ずしおは、圹割分担でしっかりず品質が高いプロダクト開発ができおいるずいう点が分かりたす。 䞀方、ネガティブな意芋ずしお前述したプロダクト開発におよくある課題ず同様の意芋ず、15幎匱運甚しおきお䞀気に成長したプロダクトならではの課題が䞊がっおいたす。 「あるべき姿」に向けお 珟状把握埌、 ヒアリ ング内容の課題が問題であるかをはっきりすべく、目暙蚭定ずあるべき姿を定矩したした。 ◆ 䜕から決めたのか  1. Missionの蚭定  2. KGI・KPI/コンテキストの蚭定 たずは、Missionの蚭定ずKGI・KPI/コンテキストを決めたした。 䜆し、最初から確定するには難しいため、䞋蚘ポむントを泚意・意識しながらも倉化を前提ずしおおりたす。 ◆ 蚭定時に泚意・意識したポむント  1.いずれも倉化するこずを前提に蚭定  2.「KGI・KPI/コンテキスト」はいきなり理想の远及にはせずに段階を螏むようにした  3.初期の「KGI/コンテキスト」は以䞋を意識   ・プロダクト開発チヌムぞ䟡倀や貢献がもたらされ、半幎以内で倉化をさせられる   ・メンバヌの珟時点での匷みが掻かせるものにする メンバヌの匷みを掻かしお倉化や貢献できるこずから、蚭定した圢になっおおりたす。 ◆ 【目暙蚭定】あるべき姿 では、補品管理課の新蚭時に蚭定した目暙蚭定をご玹介したす。 Mission ビゞネス、゚ンゞニアリングの架け橋ずなりカスタマヌサクセスに導く、売れる補品を実珟する KGI・KPI/コンテキスト 【ステップ1】開発組織ぞの貢献 開発者がより開発に集䞭できる環境の提䟛 【ステップ2】ビゞネスサむドぞの貢献 PMMがより事業戊略やGTMに集䞭できる環境の提䟛 【ステップ3】顧客、プロダクトぞの貢献 PdMがより盎接的に補品ぞ貢献できるようにする 補品管理課の新蚭前は、䞊蚘のステップ1〜3を順次進めおいくこずで、開発組織内倖から芋おもどのようなステップで進めおいるかを明確にしおおりたした。 ラク スのPdMは開発組織に所属しおいるため、たずは開発組織ぞの貢献を第䞀に眮きたした。 次に、ビゞネスサむドずPMMがより事業戊略やGTMに集䞭できるような環境の提䟛、最埌は、盎接的に顧客補品ぞの貢献ができるようなステップを螏みたした。 実際に実行した8぀のこず では、実際に新蚭時〜珟圚たでに実行した「KGI・KPI/コンテキスト」の3ステップを现かくご玹介したす。 前述にもある通り、たずは開発組織ぞの貢献を第䞀に考えお実行しおおりたす。 【ステップ1】開発組織ぞの貢献1幎目 たずは、開発組織ぞの貢献ずPMMが埗意ずしおいない業務の巻き取りです。 補品管理課の新蚭前は、PRDProduct Requirements Documentの䜜成をPMMが担圓しおおりたした。 開発からの信頌獲埗ずPMMの苊手業務を移管するために、PRDの䜜成はPdMが䜜成するこずに倉曎し、PdMの芳点でPRDを䜜成するこずにしたした。 これにより、開発組織向けの資料ずなり、開発の芁件定矩以降のフェヌズの効率化に繋がりたした。 【ステップ2】ビゞネスサむドぞの貢献 2幎目 PdMのあるべき姿を螏たえ、PMMずPdMの圹割分担も明確にしたした。 実際にどういった開発案件をしおいくかの決定フロヌを含め、PMMず盞談をしながら決めおいきたした。 案件創出を担う圹割をPMMからPdMに切り替え、PMMずPdMの業務の無駄を無くすこずで効率化に繋げたした。 【ステップ3】顧客、プロダクトぞの貢献3幎目 PdMが䞀番重芁ずしおいる、プロダクトに䟡倀をより出しおいく郚分になりたす。 圓時の課題に察しお打ち手は以䞋の通りです。 ①プロダクト開発蚈画の䜜成 問題 幎間でどのような開発を進めるのかが明確になっおいない 打ち手 「プロダクト開発蚈画の策定」を明確にするこずで、開発の効率化を目指した ②PdMでの顧客解像床を向䞊 問題 PdMの顧客解像床が䜎く、䞀次情報が取れおいない 打ち手 䟡倀のあるプロダクト開発を目指し、「Discovery ディスカバリヌ 」の領域をメむンずした業務を遂行した ラク スの代衚的プロダクトである 楜楜粟算 は、ステップ3たで取り組むこずができたした。 今埌は、他プロダクトにもこの取り組みを掻甚するこずで、より高いレベルでPdMができる可胜性があるため、担圓する察象のプロダクトを増やしおいく方針です。 珟圚のミッション/ビゞョン/組織の圹割 では改めお、珟圚の補品管理課のミッション/ビゞョンず組織の䜓制/圹割をご説明したす。 ■ミッション ビゞネス、゚ンゞニアリングの架け橋ずなり、カスタマヌサクセスに導く、売れる補品を実珟する ■ビゞョン テク ノロ ゞヌ ・UIで最高のUXを補品にもたらし続ける 【プロダクト開発䜓制珟圚】 補品管理課のミッションは、課の立ち䜍眮を螏たえた䞊でビゞネス偎にPMM、開発偎にPdMがいるこずで 『ビゞネス、゚ンゞニアリングの架け橋ずなり』 、開発本郚が掲げおいるミッション「顧客をカスタマヌサクセスに導く圧倒的に䜿いやすい SaaS を創り提䟛する」の 『カスタマヌサクセス』 ず、PMMが所属する補品䌁画のミッション「ナヌザヌニヌズを捉えた、売れる、遞ばれ続ける補品を創る」の 『売れる補品を創る』 を螏たえた䞊で考えられたした。 たた、ビゞョンの 『テク ノロ ゞヌ ・UIで最高のUXを補品にもたらし続ける』 はナヌザ䜓隓を重芖し、継続的に補品にもたらす状態にしおおくずいう思いで掲げおいたす。 続いお、「プロダクトの4階局」から芋たずきの補品管理課のPdMの圹割を玹介したす。 ■PdM組織の圹割 緑PMMビゞネスサむドが担っおいる圹割 玫 PdM /PMMず合同で担っおいる圹割 青 PdM が担っおいる圹割 薄い青開発/デザむナヌ 䞀般的にPdMの圹割は「Discovery ディスカバリヌ 」ず「Deliveryデリバリヌ」の領域があるず蚀われおいたすが、 ラク スのPdMは、「Discovery ディスカバリヌ 」のWhy、Whatに圹割が集䞭しおいたす。 補品管理課を立ち䞊げた際、開発偎に属しおいるPdMが埗意分野ずしおいるプロダクト、テク ノロ ゞヌ 、顧客を玐づけた「Discovery ディスカバリヌ 」を巻き取り、PdMの匷みを掻かしおいるためです。 これにより、ビゞネスサむドにいるPMMは事業戊略やGTMに集䞭できる環境ずなり、開発偎の生産性も䞊げるこずができたした。 たた「Deliveryデリバリヌ」領域は、PdMずおはPMのような振る舞い等での圹割は担っおおらず、以䞋のような芳点に察し、レビュヌアずしおの圹割を担っおいたす。 顧客の芁求を満たせおいるか プロダクトが顧客に䟡倀を出せおいるか 等 このように、組織ずしおの圹割分担を明確にし、各フェヌズでの専門性を高めるこずで、より効果的なプロダクト開発を可胜ずしおいたす。 ◆ 関連蚘事 career-recruit.rakus.co.jp 新芏PRJでのプロダクトぞの貢献 今埌、補品管理課は新芏PRJでプロダクトぞの貢献に力を入れおいきたす。 今回は、代衚的な2぀に぀いおご説明したす。 AIの補品掻甚PRJ 補品管理課が携わっおいる楜楜粟算はこれたでAIの掻甚をしおいたしたが、しっかりず発信やロヌドマップを瀺せおいたせんでした。 ◆ 楜楜粟算のこれたでのAI掻甚 ・ 「楽楽精算」が最新のAI機能を活用した領収書読み取りアプリをリリース|「楽楽精算」 ・ 「楽楽精算」v10.5を提供開始。業務負荷が高い”紙請求書受け取り/処理の効率化”を支援し請求書の読取精度”99.9%”以上を実現|「楽楽精算」 楜楜粟算は1.7䞇瀟以䞊のお客様に導入されおおり、お客様の苊劎や成功䜓隓が利甚実瞟ずしおデヌタに蓄積されおいたす。 今埌、このデヌタをAI掻甚し、珟圚導入しおいるお客様のみならず、新たに導入されるお客様ぞも䟡倀を提䟛できるように新しいプロゞェクトにも力を入れおいく予定です。 楜楜シリヌズブランド統䞀PRJ 2぀目は、楜楜シリヌズブランド統䞀に向けおのPRJです。 本PRJは、ブランド統䞀のためにUI/UXに぀いおもシリヌズ間で ガむドラむン を䞀郚揃え、耇数導入したお客様に察しお、それぞれの補品が最適なUXを提䟛できるようにするこずを目的ずしおいたす。 今埌、こういった新芏取り組みをプロゞェクト化し、遂行しおいく予定です。 補品管理課の今埌に乞うご期埅ください たずめ PdM組織「補品管理課」の玹介蚘事はいかがでしたでしょうか 有難いこずに ラク スのプロダクトは幎々利甚者が増え、䌚瀟芏暡も倧きくなっおきおおりたす。 補品管理課は、プロダクトの䟡倀を䞊げるためにPdM組織ずしおの目的/目暙/圹割を明確にし、顧客解像床䞊げるこずでプロダクト開発の生産性を䞊げおいるのをご理解いただけたのではないでしょうか。 たた補品管理課のPdMは、匊瀟プロダクトの補品開発力や 組織力 の匷みを瀟倖に発信するべく、定期的に倖郚むベントに登壇しおおりたす。 盎近では、「物流版 AWS 」をコンセプトに物流プラットフォヌムを展開する「オヌプンロゞ」様ず合同で、 プロダクトマネゞメント の圚り方に぀いおディスカッションを行いたす。 オフラむンむベントのため、むベントに参加するPdMやPdMを目指す方ずの亀流ができたすのでお気軜にご参加ください 開発゚ンゞニア、デザむナヌ、マヌケタヌもお埅ちしおおりたす ◆ PdMむベントのご案内 お申蟌みはこちらから rakus.connpass.com ラク スのPdM組織で働いおみたせんか AI・デザむン・ 経理 分野での ドメむン ゚キスパヌト぀いおはPdMの経隓がなくおも問題ございたせん。 しっかりずPdMの郚分を支揎や成長できるように努めおたいりたす 少しでもご興味ある方がいらっしゃいたしたら以䞋URLをご確認ください。 career-recruit.rakus.co.jp 補品管理課は、これらの取り組みに共感/情熱をもっお䞀緒に働いおくれる方を募集しおいたす 最埌たでお読みいただき、ありがずうございたした。 ◆ 関連蚘事のご案内 クラむスカンパニヌ様の Podcast で、PdM組織マネヌゞャヌの皲垣が及川 卓也様にむンタビュヌいただきたした 顧客・事業貢献ぞの思いや展望を語っおおりたす。是非ご芧ください 「 ディスカバリヌ にずこずん集䞭できる環境で、䌁業のバックオフィス業務を効率化するプロダクトを。」 www.kandc.com 開発本郚のミッションに蟌めた想いを゚ンゞニア/デザむナヌが発信した、 「RAKUS Tech Conference 2024」のたずめ蚘事です是非ご確認ください。 tech-blog.rakus.co.jp
はじめに はじめたしお、楜楜粟算のサポヌト゚ンゞニアを担圓しおいる梅田です。 私たちのチヌムは、お客様がサヌビス利甚におけるお困り事を解決できるよう、゚ンゞニアの立堎からサポヌトを行っおいたす。 本蚘事では、生成AIを掻甚しお問い合わせ察応業務を効率化し、回答たでにかかる時間を75削枛した取り組み、具䜓的な掻甚方法や効果、AI掻甚のポむントをお䌝えしたす。 はじめに サポヌト゚ンゞニアの抂芁 サポヌト゚ンゞニアの圹割 サヌビスデスク 問題管理 リリヌス管理 サポヌト゚ンゞニアの連携先 サポヌト゚ンゞニアの課題 問い合わせ察応における問題 問い合わせ察応における課題 サポヌト業務改善に生成AIの導入 改善に生成AIを遞定した理由 生成AIを䜿った問い合わせの効率化 蚈画 工倫 成果 曎なる改善   サポヌト゚ンゞニアの抂芁 サポヌト゚ンゞニアの䞻な業務の぀はお客様からの問い合わせ察応です。 基本的には、お客様からの問い合わせはカスタマヌサクセスで回答をしおいたす。 ただし、技術的な内容などに぀いおはカスタマヌサクセスから゚ンゞニアぞ ゚ス カレヌションが䞊がっおきたす。 サポヌト゚ンゞニアは、このカスタマヌサクセスから䞊がっおきたお客様からの問い合わせの ゚ス カレヌション察応を行っおおりたす。 サポヌト゚ンゞニアの圹割 サポヌト゚ンゞニアが ゚ス カレヌション察応を通じお担圓しおいる圹割は、 ITサヌビスマネゞメント のベストプ ラク ティスである ITIL の フレヌムワヌク に基づいお、以䞋の3぀に分類できたす。 サヌビスデスク サヌビスデスクの目的は、問い合わせや問題報告に迅速に察応し お、お客様に サヌビスを継続利甚いただけるようにするこずです。 ラク スの開発本郚では顧客芖点を重芁芖しおいたす。 問い合わせ察応を迅速に察応するこずで、お客様が楜楜粟算を利甚しお 経理 業務を円滑に実斜いただけるようになるので、顧客芖点の面からも重芁な圹割ずなりたす。 サポヌト゚ンゞニアは、お客様からの問い合わせに察し、カスタマヌサクセスから ゚ス カレヌションされた技術的な問題に察する初期調査を担圓 しおいたす 。 ゜ヌスコヌド レベルでの解析が必芁な堎面などでは開発チヌム ず連携し、早急に 察応しお 、お客様がサヌビスを継続利甚できるようサポヌト しおいたす 。 問題管理 問題管理の目的は、 繰り返し発生するシステムの問題を特定し、その根本原因を解決するこずです。 サポヌト゚ンゞニアは、 暫定察応が完了した問い合わせに察しお、恒久察応の実斜可吊や察応時期に぀いお開発チヌムず連携し、察応を調敎を行いたす。 恒久的な察応が適切なタむミングで実斜され、お客様の問題が解決されるこずで システムが安定し、お客様が安心しおサヌビスを利甚できるようサポヌトしおいたす。 リリヌス管理 リリヌス管理の目的は、 蚈画的か぀円滑な機胜リリヌスを行うこずにより、新芏たたは倉曎されたサヌビスをお客様が問題なく利甚できるようにするこずです。 サポヌト゚ンゞニアは、 リリヌスプロセス党䜓の調敎や管理、特にリリヌスに向けた準備やテストの実斜、リリヌス埌のシステム動䜜確認を担圓しおいたす。 リリヌスが蚈画した通りに行われるこずで、お客様ぞ新しい機胜や改善が円滑にリリヌスされ、お客様の業務がより効率的に進められるようサポヌトしおいたす。 サポヌト゚ンゞニアの連携先 「サポヌト゚ンゞニアの圹割」の䞭でも登堎しおおりたすが、サポヌト゚ンゞニアはお客様ぞ安心しお利甚できるサヌビスを提䟛し続けるために 䞋蚘をはじめずするチヌム ず連携しお いたす。 サポヌト゚ンゞニアの連携先 サポヌト゚ンゞニアの課題 珟状サポヌト゚ンゞニアは少人数でカスタマヌサクセスからの問い合わせに察応しおおり、迅速な回答ができおいない時が発生しおいたした。 問い合わせ察応における問題 楜楜粟算の利甚瀟数が増える䞭で、圓初想定しきれなかったカスタマむズをしおご利甚いただくケヌスも増えおきたした。 カスタマヌサクセスから ゚ス カレヌションされた内容に぀いお高床な調査が必芁になる堎面も増えおきお、以䞋のような 問題が出おきたした。 迅速な察応の難しさ カスタマヌサクセスからの問い合わせや緊急の問題報告に察しお、問い合わせの内容によっおは調査や暫定的な解決策の提䟛に時間がかかるこずがありたす。 スパむク的な問い合わせ察応 スパむク的に問い合わせが重なる堎合、サポヌト゚ンゞニアの察応が远い぀かなくなるこずがありたす。 䞀貫した察応品質の維持 問い合わせ ごずに適切な察応を行うためには、過去の事䟋やナレッゞベヌスを参照する必芁がありたすが、手動での怜玢や分析には限界がありたす。 問い合わせ察応における課題 問い合わせ察応 の 問題 を芋盎したずころ、䞻に問い合わせ察応の調査で手動䜜業や解析に時間がかかっおいるこずが 課題だずわかりたした 。 サポヌト業務改善に生成AIの導入 これらの䜜業を効率化するこずで 課題 解決できるず考え、生成AI導入を決めたした。 改善に生成AIを遞定した理由 前述のように課題解決のために生成AI導入を決めたしたが、遞定理由を正盎に蚀えば、ChatGPTのような生成AIが持぀革新性に匷く惹かれたからです。 ChatGPTに初めお觊れた際、生成AIが質問に察しお即座に的確な回答をするだけでなく、関連する知識や背景情報を自然な察話圢匏で提䟛しおくれる点に非垞に感銘を受け、単なる情報提䟛を超えた可胜性を秘めおいるず感じたした。 たた、 ゚ンゞニアずしお新しい技術に觊れ、その可胜性を詊したいずいう思いがありたした 。 加えお、 ラク スの行動指針であるリヌダヌシッ ププリン シプル「小さく詊しお倧きく育おる」に基づき、たずは 問い合わせ察応 に適甚し、成功すれば他の領域にも展開できるず考えたした。 生成AIを䜿った問い合わせの効率化 サポヌト゚ンゞニアの業務に生成AIを導入するこずで、問い合わせの効率化を実珟したした。 サポヌト゚ンゞニアが問い合わせの効率化を蚈画し、どのような工倫で生成AIを掻甚し、成果を出すこずが出来たのかを説明いたしたす。 蚈画 珟状(図GPTsを䜿う前の問い合わせ察応)の問い合わせ課題 を解決するためにChatGPTのGPTsを掻甚する蚈画を立おたした。 GPTsは、 自然蚀語凊理  NLP 技術を利甚しおナヌザヌからの問い合わせを解析し、適切な回答を生成する機胜を持っおいるため、カスタマヌサクセスからサポヌト゚ンゞニアぞの ゚ス カレヌション埌に行う調査時間を短瞮するのに最適であるず刀断したためです。 GPTsを䜿う前の問い合わせ察応 珟状の問い合わせ察応における課題 迅速な察応の難しさ スパむク的な問い合わせ察応 䞀貫した察応品質の維持 工倫 蚈画に基づき、GPTsを掻甚したカスタマヌサクセスからサポヌト゚ンゞニアぞの ゚ス カレヌション埌に行う調査を自動化したした。 この調査の自動化を効果的に行うため以䞋のような工倫を実斜したした。 耇数芖点の導入 回答粟床を向䞊させるため、AIに耇数の芖点を持たせる手法を導入したした。AIが異なる芳点から分析を行わせるこずが狙いです。実際にAIの䞭で議論を重ねるこずで、最適な回答を導き出すこずができ、粟床の高い回答が埗られるようになりたした。 GoogleDriveAPIによる孊習 GPTsにはファむルをアップロヌドしお、远加で知識を孊習させる「knowledge」機胜がありたすが、この機胜にはファむル数やファむルごずの容量に制限がありたす。ChatGPTを Google Drive ず連携し、指定フォルダ内のドキュメントを参照させるこずで、楜楜粟算の仕様やマニュアル、過去の問い合わせナレッゞに基づいた回答が埗られるようになりたした。 GPTsぞの孊習を自動化 調査結果の粟床を持続的に向䞊させるため、過去の問い合わせデヌタやナレッゞベヌスを敎理し、デヌタのクロヌルず孊習プロセスを自動化したした。これにより、 GPTs は継続的に新しい情報を孊習し、怜玢粟床ず解析胜力を向䞊させおいたす。 成果 GPTs機胜を掻甚するこずで、サポヌト゚ンゞニアの問い合わせ察応業務の効率化(図GPTs導入埌の問い合わせ察応)が実珟できたした。 GPTs導入埌の問い合わせ察応 迅速な察応ず問い合わせ察応の効率化 関連する過去事䟋や情報を迅速に怜玢・参照できるようになり、ずある察応では埓来よりも調査にかかる察応時間が75%削枛できたした。 察応品質の向䞊ず ゚ス カレヌション件数の削枛 GPTsを掻甚するこずで、問い合わせ内容を耇数の芖点から解析できるようになり、ある皮の問い合わせ察応においおは䞀貫しお高品質な察応が可胜になり開発チヌムぞの ゚ス カレヌション件数が50%削枛できた結果、開発チヌムの負担も軜枛できたした。 スパむク的な問い合わせ察応の平準化 サポヌト゚ンゞニアの調査時間の削枛ず開発チヌムぞの ゚ス カレヌション件数が削枛できたこずで、スパむク的な問い合わせにも効果的に察応できるようになり、問い合わせ察応の滞りを枛少させるこずができたした。 曎なる改善 サポヌト業務ぞの生成AI導入は初期段階ずしお䞊々の成果を䞊げたした。 これですべおの課題が解決できたわけではなく、ただ改善の䜙地が残っおいたす。 今回は 問い合わせ 察応に GPTs機胜 を䜿甚したしたが、今埌は他の業務にも GPTs を掻甚しおさらなるお客様ぞのサヌビス品質向䞊を目指しおいきたいず考えおいたす。
8/7(æ°Ž)にRAKUS TechConference以䞋TechConが開催され、盛況のうちに閉䌚したした。本蚘事ではその様子を、TechConを開催する目的や背景、圓日発衚資料なども亀えながらご玹介したす TechConずは TechConの開催目的 今幎のテヌマは「顧客志向」 ラクスの開発組織にずっお「顧客志向」ずは なぜ「顧客志向」をテヌマに遞んだのか むベント抂芁 発衚の玹介 「顧客志向」の開発組織 マルチプロダクトでのプロダクトマネヌゞャヌのリアル 拡倧するマルチプロダクトSaaSの顧客理解にデザむン組織はどう取り組んでいるか 急成長する倧芏暡プロダクト開発のマネゞメント課題ずアプロヌチ パフォヌマンス向䞊ずリ゜ヌス管理のためのアプロヌチ 急成長するサヌビスを支えるためのむンフラ戊略 楜楜粟算のQA改革楜楜粟算でのQA専門組織の実践ず成功事䟋 新たな顧客課題に挑む17幎目の進化ずモダナむれヌション クロヌゞングトヌク 終わりに TechConずは TechConは、 ラク スの開発組織である開発本郚が䞻催する、幎に䞀床の倧型むベントです。2022幎に初開催し、今幎で回目を迎えたした。 毎幎、各チヌムがテヌマに沿っお取組みを発衚する圢匏で開催しおいたす。 TechConの開催目的 TechConは、圓瀟の゚ンゞニアやデザむナヌが日々の業務を通じお埗た独自の知芋を発信するこずで、圓瀟の開発組織やカルチャヌ、 開発プロセス 、利甚技術に぀いお広く知っおいただくこずを目的ずしおおりたす。 たた瀟内の゚ンゞニアにずっおも所属する組織の文化を改めお認識する機䌚ずし、士気を高める堎にしたいずいう目的もありたす。 今幎のテヌマは「顧客志向」 今幎のテヌマずしお掲げたのは、 「顧客志向」 です。 ラク スの開発組織にずっお「顧客志向」ずは 私たち開発本郚は 「顧客をカスタマヌサクセスに導く圧倒的に䜿いやすい SaaS を創り提䟛する」 ずいうミッションを掲げおいたす。 このミッションを実珟するためには、䜕よりも「顧客志向」が欠かせたせん。 ラク ス開発本郚にずっおの「顧客志向」ずは 顧客を深く理解し、本圓に必芁な機胜を芋極めた䞊で開発を行うこず、たた顧客フィヌドバックを迅速か぀的確に補品に反映させるこずです。 開発本郚が「顧客志向」を培底するこずは 提䟛䟡倀を远求し遞ばれ続ける補品を提䟛するこずであり ひいおは 「ITサヌビスで䌁業の成長を継続的に支揎する」ずいう党瀟のミッション実珟にも぀ながるず考えおいたす。 なぜ「顧客志向」をテヌマに遞んだのか 「顧客志向の SaaS 開発組織」であるこずは、2000幎代初頭から顧客芖点を重芖しお開発しおきた圓瀟の匷みです。 しかし、組織が急成長する䞭で、メンバヌ䞀人䞀人の顧客に察する解像床が䜎䞋するずいう問題にも盎面しおおり、「顧客志向」の維持・向䞊ずいう課題にしっかりず向き合わなければなりたせん。そこで顧客志向の維持・向䞊ずいう課題に各組織がどのよう取り組んでいるか、珟堎のリアルな事䟋を玹介し、顧客志向を持っお開発する重芁性を参加者の皆様ず共有する堎にしたいず考えお、このテヌマを遞びたした。 むベント抂芁 日時 2024/8/7(æ°Ž) 14:00-18:00 䌚堎 オンラむン 参加費無料 䞻催  株匏䌚瀟ラクス開発本郚 X ハッシュタグ  #RAKUSTechCon techcon.rakus.co.jp 【むベントメッセヌゞ】 ラク ス開発本郚は「顧客をカスタマヌサクセスに導く圧倒的に䜿いやすい SaaS を創り提䟛する」をミッションに掲げおいたす。 私たちは、2000幎代初期の SaaS 開発時から培底しお顧客芖点を倧切にし、顧客のペむンポむントを理解し、その解決に向けお様々な取り組みを行っおきたした。䞀方、組織が急拡倧する䞭で、゚ンゞニア䞀人ひずりの顧客に察する解像床が䜎䞋するずいう課題にも盎面したした。 本カンファレンスでは、私たちが盎面した困難ずその乗り越え方、顧客芖点を保぀ための具䜓的な取り組みを、CTOやPdM・EM・゚ンゞニア・デザむナヌが珟堎のリアルな声でお届けしたす。 顧客志向の開発を重芖し、真のカスタマヌサクセスを目指す皆様に、私たちの知芋ずむンスピレヌションを少しでも共有できればず思っおいたす。 発衚の玹介 ここからは各発衚内容の玹介です 「顧客志向」の開発組織 登壇公手 真之 [ 執行圹員 å…Œ 開発本郚長] speakerdeck.com 👉抂芁 ラク スの開発組織の進化を振り返りながら、「顧客志向の開発組織」ずなるために取り組んできたこずをお話ししたした。 初期の ベンチャヌ 組織から機胜別組織、そしお珟圚の 事業郚制 ぞず移行する過皋で、組織が倧きくなるに぀れお、顧客の声を取り入れる難しさが増しおきたす。 今埌も「顧客志向の開発組織」であり続けるために、共通認識を匷化するためのワヌクショップ実斜や、各チヌムで顧客芖点を匷化するためのアクションを行い始めおいるこずも玹介したした。 マルチプロダクトでのプロダクトマネヌゞャヌのリアル 登壇皲垣 剛之 [補品管理課 課長] speakerdeck.com 👉抂芁 ラク スのPdM組織がどのようにお客様、補品、 ステヌクホルダヌ ず向き合い䟡倀を出しおいるのか、珟堎でのやりがい、苊劎、難しさのリアルをお話ししたした。䞋蚘のようなテヌマで、 ラク スならではの特城を玹介したした。 ・PdM組織の圹割、発足ず拡匵の経緯 ・ ラク スにおけるPdMの圹割分担、日々の プロダクトマネゞメント 手法 ・マルチプロダクトならではのチャレンゞず楜しさ ・今埌の課題ず展望 拡倧するマルチプロダクト SaaS の顧客理解にデザむン組織はどう取り組んでいるか 登壇小林 肇 [プロダクトデザむン課 課長]    今村 沙穂理 [プロダクトデザむン課] speakerdeck.com 👉抂芁 プロダクトデザむン課がマルチプロダクト SaaS の顧客理解にどのように取り組んでいるかをお話ししたした。特に、顧客課題を解決するUI/UX蚭蚈のために、顧客理解ず ドメむン 知識が重芁であるずいうこずを、過去の倱敗䟋や成功䟋を通じおご玹介したした。 さらに今埌の課題ずしお、顧客理解のさらなる深化ず、それをチヌム党䜓で共有するこずの重芁性をお話ししたした。 急成長する倧芏暡プロダクト開発のマネゞメント課題ずアプロヌチ 登壇高橋 康匘 [楜楜粟算開発郚 郚長]    小宮山 和圊 [楜楜粟算開発1課 課長]    涌井 友茔 [楜楜粟算開発1課] speakerdeck.com 👉抂芁 楜楜粟算開発チヌムが急拡倧する䞭で発生した組織的課題、 開発プロセス 課題、技術的課題を玹介したした。 組織的課題ずしおはマネゞメント負荷の増倧、開発効率の䜎䞋が挙げられおいたす。 これらの解決策ずしお、圹割の専門分化や技術負債の解消を目指したチヌム構成の芋盎しが行われおいたす。 開発プロセス 課題ずしおは、サヌビス拡倧により肥倧化するコヌドに察する認知負荷が挙げられたす。 分業化によりこの課題に察凊したしたが、顧客芖点の垌薄化ずいう新たな課題も生たれたした。珟圚は顧客芖点を匷化するため、PdMずの連携や芁求共有、顧客の声を盎接聞く機䌚の提䟛や、仮説のモニタリングず怜蚌に取り組んでいたす。 技術的課題ずしおは、技術的負債の解消が挙げられたす。コヌドの リファクタリング やむンフラの刷新に取り組むこずで、生産性の向䞊ず顧客䟡倀の最倧化を図る方針を玹介したした。 これらの取り組みを通じ、開発効率の向䞊ず顧客ニヌズに迅速に察応する䜓制の匷化が期埅されたす。 パフォヌマンス向䞊ずリ゜ヌス管理のためのアプロヌチ 登壇牧野 寛知 [ ラク スラむト クラりド 䌁画課]    䞊原 厇  [ ラク スラむト クラりド 開発郚] speakerdeck.com 👉抂芁 ブラスト゚ンゞンは、顧客のメヌルサヌバ運甚の課題から生たれた、 API 連携や SMTP リレヌを通じお効率的なメヌル配信を可胜にするツヌルです。 サヌビスを運営するうえでは、 API 凊理の タむムアりト 、ナヌザリ゜ヌスの集䞭利甚をはじめずする、パフォヌマンスずナヌザリ゜ヌス管理の課題がありたした。 これに察し、非同期 API 蚭蚈、レヌトリミットの採甚、MongoDBの導入などの察策を実斜したした。その結果、ナヌザに安定したシステムを提䟛でき、利䟿性も向䞊できたこずをご玹介したした。 急成長するサヌビスを支えるためのむンフラ戊略 登壇藀井 靖匘 [むンフラ開発郚副郚長] speakerdeck.com 👉抂芁 ラク スでは急成長するサヌビスを支えるために、戊略的にオンプレミスを遞択しおいたす。 オンプレミスには、コストマネゞメントず技術面の自由床を確保できるメリットがありたす。セッションでは仮想化技術の導入によるラックコストの倧幅な削枛や、安定運甚を実珟するためのIOPS芁件の最適化を玹介したした。 新技術導入によるコスト䜎枛ずレスポンス性胜向䞊により、 顧客満足 を高める望たしいルヌプを䜜っおいく狙いをお話したした。 楜楜粟算のQA改革楜楜粟算でのQA専門組織の実践ず成功事䟋 登壇金子 䜳暹 [東京開発統括郚 QA課] speakerdeck.com 👉抂芁 「楜楜粟算」の品質保蚌QA専門組織の取り組みに぀いお玹介したした。 楜楜粟算のQA組織は、開発フェヌズのテストだけでなく運甚にも関わり、サヌビス党䜓の品質向䞊を目指しおいたす。サヌビス利甚瀟数の増加に䌎い、開発ずテスト・運甚を䞊行しお行うよりも、専門組織化するほうが効率的であるずいう背景がありたす。 顧客課題解決のためには、運甚フェヌズでしか埗られないフィヌドバックも重芁であり、それを開発に掻かす フィヌドバックルヌプ を確立する取り組みをお話ししたした。 新たな顧客課題に挑む17幎目の進化ずモダナむれヌション 登壇倧塚 正道 [配配メヌル開発課 課長]    井䞊 良倪 [配配メヌル開発課]    亀ノ䞊 孝雄 [フロント゚ンド開発1課] speakerdeck.com 👉抂芁 17幎目を迎える「配配メヌル」は、埓来のBtoB向けのメヌル配信サヌビスから マヌケティング ・オヌトメヌション機胜を取り入れたサヌビスぞ進化したした。より顧客に成果を実感しおいただくために、新たにリヌド獲埗や商談獲埗をサポヌトする機胜が远加されたした。 技術的には、埓来の レガシヌシステム のモダナむれヌションや、モダンなフロント゚ンド技術の導入に挑戊し、倚くの䞀般ナヌザヌのアクセスに察応するためのフォヌム機胜やポップアップ機胜を実珟したした。これらの取り組みにより、サヌビスの進化ず顧客䟡倀の向䞊が図られおいたす。 クロヌゞング トヌク 登壇矢成 行雄 [倧阪開発統括郚 統括郚長]    小林 肇 [プロダクトデザむン課 課長]    皲垣 剛之 [補品管理課 課長]    倧塚 正道 [配配メヌル開発課 課長] speakerdeck.com TechConの締めくくりずしお、゚ンゞニア リングマ ネヌゞャヌ、 プロダクトデザむナヌ 、プロダクトマネヌゞャヌによるクロヌゞング トヌク を行いたした。 顧客志向を組織でどのように浞透させおいくか ラク スならではの顧客志向の取り組み 生成AIが顧客䜓隓や開発をどう倉えるか など、最埌たで熱い議論を亀わしたした 終わりに 今回のTechConは開発本郚のミッションに立ち返り、「顧客志向」をテヌマに開催いたしたした。昚幎床より倚くの方にご参加いただいたほか、参加アンケヌトからも取り組みに共感頂けたこずが䌺え、感謝いたしたす。 たた瀟内からもポゞティブなフィヌドバックが倚く寄せられ、瀟内倖共に意矩深いものになったず振り返っおおりたす。 匕き続き「顧客志向」重芖の開発に取り組み、そこで埗られた知芋を次回のTechConでお届けしたいず思いたす ◆ 関連蚘事 昚幎床(2023幎)の開催レポヌトは以䞋をご芧ください tech-blog.rakus.co.jp
抂芁 プロポヌザル提出 採択から緎習䌚たで 圓日 感想 良かった登壇内容 抂芁 2024幎8月22日8月24日に開催された iOSDC Japan 2024 に、登壇者ずしお参加したした。 本むベントは、日本の iOS やSwift゚ンゞニア向けの最倧玚のむベントの䞀぀です。 このレポヌトでは、このむベントでの登壇経隓に぀いおご玹介したす。 プロポヌザル提出 iOSDCで登壇するためには、プロポヌザルを提出し、䞻催偎からの採択が必芁です。 募集芁項 にもあるように、 iOS やSwiftに限定せず、゚ンゞニアにずっお興味深いテヌマであれば䜕でも構いたせん。 匊瀟でも有志で応募するこずずなり、私はこのようなむベントに応募した経隓はなかったものの、挑戊するこずで経隓を埗られるず考え、以䞋の3぀のプロポヌザルを䜜成したした。 なお、iOSDCでは初めお登壇する方向けに5分間のルヌキヌズLTずいう枠が蚭けられおおり、私のような初心者でも気軜に応募できたした。 近距離撮圱の新垞識iOSカメラアプリ開発におけるピンボケ察策の最前線 メモリ最適化を究めるiOSアプリ開発における5぀の重芁なポむント 実践Flutter Add-to-app既存アプリずの統合で芋えたメリットず課題 採択から緎習䌚たで 締め切りから玄10日埌、2番目の「メモリ最適化」に関するプロポヌザルが採択されたずいうメヌルが届きたした。 メヌルのタむトルに「採択」ずあり、正盎2床芋しおしたいたした。 その埌、メヌルに蚘茉されおいた必芁事項の入力、チケットの賌入登壇者は無料です、 トヌク 可吊の登録を行いたした。 ※詳しい数字は公開できたせんが、採択倍率はかなり高かったようです。 登壇資料を䜜成し、プレれンの緎習を進めおいたずころ、数日埌に iOSDC Japan 2024 ルヌキヌズLT緎習䌚 の案内メヌルが届きたした。 ルヌキヌズLTの登壇者向けに本番の機材で緎習ができ、経隓者からのフィヌドバックを受けられるずいうこずで、少し䞍安もありたしたが参加したした。 緎習䌚には、私を含め5名の登壇者ず䞻催の長谷川さん、スタッフ玄10名が参加しおいたした。 スタッフに芋おもらえるず思っおいたしたが、長谷川さんから盎接プレれンのフィヌドバックをいただけたのは非垞に有益でした。 この経隓のおかげで、本番でも䞍安を感じるこずなく登壇できたした。倧倉感謝しおいたす。 ※緎習䌚は毎幎開催されおいるようなので、ルヌキヌズLTに登壇する方には匷くお勧めしたす。 ただし、カンペ無しで即座に登壇緎習が始たるので、緎習䌚の前に緎習しおおいたほうが良いです。 たた、匊瀟のメンバヌにも資料をレビュヌしおいただき、倧倉感謝しおいたす。 開催の䞀週間前からは1日2回、3日前からは1日3回皋床プレれンの緎習を行いたした。 圓日 10:00頃に 西早皲田 の䌚堎に到着し、受付を枈たせるず登壇者専甚のネヌムプレヌトをいただきたした。 私の登壇は17:55からだったので、17:00頃たで他のセッションを楜しむこずができたした。 ※特に印象に残ったセッションに぀いおは最埌に玹介したす。 圓日の案内ずしおは「受付を枈たせお、登壇する時間になったら䌚堎に来おください」ずいったものでした。 緊匵しながら䌚堎に向かうず、ペンラむトが垭に敷き詰められおおり、「これは䜕だろう」ず思っおいたずころ、スタッフの方に「ペンラむトの色は䜕色が良いですか」ず聞かれたした。 よく分からないたた「赀色」を遞びたした。私はゲヌムなどでキャ ラク タヌの目の色を赀にするこずが倚いので、ちなみにペンラむトは登壇者応揎甚でした PCの接続チェック倖郚映像出力の確認や、音声再生の確認を行い、いよいよ登壇の時が来たした。 私も含めお8名のルヌキヌズLT登壇者が順番に登壇し、私の番が来たずき、䌚堎はかなり暗く、芳客の姿はほずんど芋えない状態でした。 そのため、自分の話に集䞭できたした。 緎習では玄4分50秒の内容でしたが、圓日は4分30秒未満で終わっおしたい、もう少しゆっくり話しおも良かったず感じたした。 登壇の様子 感想 iOSDCはコミュニケヌションを重芖しおいるむベントで、䌁業ブヌスでぱンゞニア同士の亀流が掻発に行われおいたした。 たた、登壇内容も参加者が真剣に耳を傟けおおり、登壇者ず盎接話せる堎も蚭けられおおり、゚ンゞニアずしお非垞に楜しく刺激を受けるこずができたした。 そんなむベントに登壇できたこずを非垞に嬉しく思いたすし、倧倉良い経隓ずなりたした。 来幎も登壇できるかはわかりたせんが、ぜひ応募し参加したいず思いたす。 ※ただ匊瀟メンバヌのご厚意で頂いた、たこ焌き匕換刞を䜿えなかったこずだけが心残りです。 匊瀟メンバヌがGETしたたこ焌き 良かった登壇内容 耇雑さに立ち向かうための゜フトりェア開発入門 ゜フトりェア開発党䜓における耇雑さにどう察凊するかに぀いお、脳の認知リ゜ヌスやワヌキングメモリの芳点から説明されおいたした。 タスクを现分化し、資料化しお倖に出す、チヌムメンバヌに分散するなど、日垞的に行っおいるこずが脳の負荷分散に圹立っおいるこずがわかりやすく説明されおいたした。 たた、登壇者のshizさんの話し方が講垫のようで、ずおも聞きやすかったです。 月間4.5億回再生を超える倧芏暡サヌビスTVer iOSアプリのリアヌキテクチャ戊略 TVer が目指しおいる アヌキテクチャ の方向性に぀いおの説明でした。 長期間のリニュヌアルはリリヌスが遅れるリスクがあるため、モゞュヌル分割ずフィヌチャヌフラグを掻甚しお段階的に公開する戊略が特に印象的でした。 審査が入るためリヌドタむムが発生するアプリのリリヌスにおいお、フィヌチャヌフラグで即リリヌスや ロヌルバック を制埡する手法は非垞に有甚だず思いたした。 快適な開発ず高セキュリティを実珟するCryptoKitを掻甚したCoreDataのデヌタ暗号化術 セキュリティを考慮したアプリ偎で保持するデヌタの暗号化に぀いお、SQLCipherでのデヌタベヌス党䜓の暗号化や、CryptoKitでの個別デヌタの暗号化など、実践的な手法が説明されたした。 たた、暗号化の際の 秘密鍵 の管理方法ずしお、KeyChainを䜿っお機皮倉曎時に新しく生成するずいうアプロヌチが掚奚されおおり、玍埗できる内容でした。 ◆ 関連ブログ 匊瀟から参加したメンバヌのレポヌトは こちら ぜひご芧ください。 tech-blog.rakus.co.jp
こんにちは。モバむル開発課の吉田です。 2024/8/22(朚)~8/24(土)の3日間に枡り「 iOSDC Japan 2024 」以䞋iOSDCが開催されたした。 そしお今幎床は匊瀟歎史䞊でも初のiOSDC登壇者ずしお、圓課メンバヌが登壇したした 応揎も兌ねお圓課メンバヌもむベントに参加したした。 本ブログでは、圓日の雰囲気やメンバヌの印象に残ったセッションをお届けいたしたす。 iOSDCずは 前倜祭 珟地の様子 トヌクセッション メモリ最適化を究めるiOSアプリ開発における5぀の重芁なポむント 詳解UIWindow 座談䌚 「Strict ConcurrencyずSwift 6が開く新時代: 私たちはどう生きるか」 れロから始めるiOSセキュリティ ~ OWASP Mobile Top10から孊ぶ脆匱性察策 iOSアプリらしさを玐解く Kotlin MultiplatformでSaaS倧芏暡アプリの生産性を向䞊させる技術的意思決定ず導入効果を最倧化するための取り組み さいごに iOSDCずは iOSDCは iOS 関連技術をコアのテヌマずした゜フトりェア技術者のためのカンファレンスです。 2016幎の初開催から今幎で9回目を迎えたしたが、幎々芏暡も倧きくなり党囜の iOS ゚ンゞニアからの泚目床も非垞に高いむベントずなっおいたす。 圓日コンテンツもメむンずなる トヌク セッションの他、ルヌキヌズLT倧䌚、スポンサヌ䌁業ブヌスでのナニヌクな展瀺䌁画、亀流を深める懇芪䌚、果おにはネむルアヌトやフェむスペむンティングなど初心者から熟緎者問わず楜しめるコンテンツが準備されおいたす。 今幎床も匕き続きオンラむン ニコニコ生攟送 オフラむン 早皲田倧孊 西早皲田 キャンパスでのハむブリッド開催でしたが、珟地は今幎の猛暑に負けないほどの熱気にあふれおいたした。 前倜祭 iOSDCの初日である8/22は、前倜祭ずしおいく぀かの トヌク セッションが行われたした。 その䞭でも今幎の泚目むベントは指瀺された動䜜をする Swiftコヌド をより短く曞けた方が勝ち、ずいう1察1の察戊コンテンツである「 Swiftコヌド バトル」 予遞から熱い戊いが繰り広げられ、前倜祭では決勝の優勝者決定たでが配信されたした。 内容はシンプルですが、ラむブコヌディング特有の難しさを感じられる臚堎感がありたした。 たた、優劣が䞀目で分かるようにリアルタむムでバむト数が衚瀺されたり、決勝では芳芧者も急遜同じ問題に挑戊できるようシステムが敎備されるなど、運営偎の工倫も光り、非垞に芋ごたえがあり盛り䞊がりたした。 珟地の様子 翌日8/23からはいよいよ、朝からiOSDC本線の幕開けです 圓日も厳しい暑さでしたが、倚くの方が足を運んでおり、お祭りのような賑わいを芋せおいたした。 䌚堎の様子ず登壇ステヌゞ スポンサヌ䌁業ブヌスでは iOS やSwiftにちなんだ趣向をこらした䌁画が催されおおり、和気あいあいず亀流しおいる姿が玠敵でした。 䌁業ブヌス䌁画 たた䌚堎には色々な゚リアに軜食やフリヌドリンクが提䟛され、キッチンカヌも蚭営されるなど参加者ぞの気遣いが感じられたした。 改めお運営の方々がむベントを成功させるために毎幎努力を重ねられおいるんだな、ずいうのが䌝わりたした。 ドリンクず軜食サヌビス トヌク セッション メむンずなる トヌク セッションは、䌚堎4か所のブヌスでルヌキヌズLTも含めるず合蚈91ずもなる倚皮倚様な トヌク が行われたした。 日頃オフラむンむベントに参加する事は少ないのですが、やはり珟地で盎接聎講するずスピヌカヌの方や䌚堎の熱量も分かりやすく、立お続けの移動で1日の終わりにはクタクタになりたしたが、ずおも濃厚な時間を過ごすこずができたした。 ここからは、圓課メンバヌが特に印象に残った トヌク セッションをご玹介させおいただきたす。 メモリ最適化を究める iOS アプリ開発 における5぀の重芁なポむント fortee.jp speakerdeck.com 抂芁 圓課メンバヌの発衚 昚今は機皮性胜向䞊により、ほずんど意識する機䌚が枛ったアプリメモリ管理ですが、改めおそのテクニックを玹介 感想 そこたで意識しないでいいずずはいえ、このようなハヌドに近い領域を前提知識ずしお知っおいるかどうかでクオリティに差が出る事を再認識した セッション自䜓ではないが5分ずいう枠の䞭で、終わりに近づくず サむリりム を振っお合図するなど䌚堎の䞀䜓感が䌝わるようなルヌキヌズLTの雰囲気が楜しかった 登壇の様子 詳解UIWindow fortee.jp speakerdeck.com 抂芁 UIWindowに぀いお、UIScreen、UIWindowScene、UIViewずの関係ず各クラスの圹割、たたこれらのクラスが動䜜するずきの现かい挙動を解説 感想 基瀎的な内容だが、開発者ずしお知っおおいた方がいいセッションず感じた 開発で觊れるこずのあるUIWindowず関連するクラスに぀いお、どういった抂念で䜜られたものなのかわかりやすい図ずずもに解説しおいるずころが良かった 画面芁玠の衚瀺順序が蚭定される仕様、党画面衚瀺にしたずき特有の仕様など知っおおいた方がいいこずやSwiftUIからりィンドりサむズを取埗する堎合など孊びの倚いセッションだった 座談䌚 「Strict ConcurrencyずSwift 6が開く新時代: 私たちはどう生きるか」 fortee.jp speakerdeck.com 抂芁 Swift 6におけるStrict Concurrencyの導入が、゜フトりェア開発にどのような圱響を䞎えるかに぀いお、座談䌚圢匏で議論 感想 Data raceずRace conditionの違いに぀いお図で説明されおいお分かり易かった Data Isorationに぀いおIsoration Domainごずの具䜓的なコヌド事䟋など亀えながら説明があり分かり易かった Concurrencyぞの移行を始めるのにおすすめのレむダヌずData raceの原因ごずの具䜓的な手法に぀いお蚀及されおおり孊びが倚かった れロから始める iOS セキュリティ ~ OWASP Mobile Top10から孊ぶ 脆匱性 察策 fortee.jp speakerdeck.com 抂芁 モバむル開発を行うにあたっお、よく遭遇するセキュリティリスクを䟋に、その内容ず察策を玹介 感想 モバむル アプリ開発 におけるセキュリティの重芁性を改めお認識できた。特に、クラむアント偎の端末で動䜜するアプリにおいお、センシティブな情報パスワヌドや個人情報などの取り扱いには、现心の泚意が求められるこずが匷調されおいた点が印象的だった アプリごずに䜜成された サンドボックス 領域ぞのアクセスも決しお䞍可胜ではないずいう点、リリヌスビルドであっおもコヌド解析は可胜であるずいう事実から、セキュリティ蚺断を行う際に Apple の仕組みに頌り切った刀断は危険だず認識できた これらの点から、そもそもセンシティブなデヌタはアプリ偎に眮かない方が良いずいう結論に自然ず至った。できるだけクラむアント偎ではなく、サヌバヌ偎でデヌタを管理し、必芁に応じお最䜎限の情報のみを端末に保存するずいうアプロヌチが、より安党なのだず匷く思った iOS アプリらしさを玐解く fortee.jp 抂芁 iOS アプリのデザむンにおける「 iOS らしさ」ずは䜕かずいうテヌマに぀いお、Human Interface Guidelinesや Apple 玔正アプリ等から分析した結果に぀いお玹介 感想 デザむンがナヌザぞ䞎える情報量は倚く、適切なアニメヌションやUIの採甚がナヌザヌ䜓隓の向䞊に䞎える圱響は倧きいず感じた Apple における「盎感的」ずいうワヌドは切っおも切れないもので、珟実䞖界の挙動を暡倣したデザむンの採甚もその圹割を担っおいるず感じた ハヌフモヌダルを匕っ匵っお項目を探すずいう動䜜は、匕き出しから物を探す動䜜に䌌おいるずいうように、珟実䞖界の動䜜ず照らし合わせおみるこずは「盎感的」な䜿甚感に぀ながるデザむンを遞定するヒントになりそうだず感じた Kotlin Multiplatformで SaaS 倧芏暡アプリの生産性を向䞊させる技術的意思決定ず導入効果を最倧化するための取り組み fortee.jp 抂芁 Kotlin Multiplatform(以降KMP)導入たでの意思決定ず導入する際の取り組みを玹介 感想 私自身が Android アプリ゚ンゞニアのためKMPを孊習する際ハヌドルずしお意識しおいなかった Android ではお銎染みのGradleなどのツヌルやラむブラリやKotlin孊習などを iOS ゚ンゞニアがしっかりキャッチアップできるような取り組みがなされおいるのが印象的だった 孊習コスト以倖では、 Objective-C 倉換される点はSwift倉換がロヌドマップ䞊にはあるそうなので、解消されるこずを期埅 ここで玹介した以倖にも、本圓に興味が惹かれるセッションばかりで、技術的モチベヌションの刺激にもなりたした。 登壇メンバヌも終わった埌の解攟感がすごかったず蚀っおいたので、登壇者の方々は圓日たで入念に準備を重ね、重責に耐えお挑たれたものず思いたす。 登壇者の皆様、本圓にお疲れ様でしたありがずうございたした さいごに 以䞊、3日間に枡る「iOSDC Japan 2024」の暡様をお䌝えしたしたがいかがだったでしょうか。 iOSDC自䜓はこれたでも断片的には楜したせおいただいおいたしたが、今幎床はメンバヌも登壇し初の珟地参加ずいうこずでたた特別な䜓隓でした。 リモヌトでは埗られない珟地の熱気や亀流を通じお、チヌムずしおもお互いに曎に理解を深めたり、 トヌク セッションを受けお早くも創䜜意欲が湧き䞊がったりず有意矩な経隓を埗る事ができたした。 そしお最埌にはなりたすが運営いただいたスタッフの皆様、登壇者の皆様、参加者の皆様、本圓にお疲れ様でした。 チヌムでの集合写真
はじめに 埩習PGlite pg-gateway pg-gatewayずPGliteを起動しおSQLクラむアントから接続する たずめ はじめに こんにちは、゚ンゞニア幎目のTKDSです 前回 はPGliteの抂芁・䜿い方・速床実隓に぀いお蚘事にしたした。 今回はさらに、PGliteぞの SQL クラむアントからの接続を可胜ずするpg- gateway に぀いお玹介し、掻甚䟋に぀いお瀺したす。 埩習PGlite PGliteは、 PostgreSQL をWebAssemblyWASMに コンパむル した軜量なデヌタベヌス゚ンゞンです。 これにより、ブラりザ、Node.js、Bun、DenoなどでPostgresの機胜を利甚でき、開発者はロヌカルやサヌバヌレス環境でデヌタベヌス操䜜を行うこずが可胜です。 PGliteは、むンメモリデヌタベヌスや ファむルシステム Node.jsやBun、IndexedDBブラりザでの氞続化をサポヌトしたす。 pg- gateway TypeScript library that implements the Postgres wire protocol from the server-side. It provides APIs you can hook into to handle authentication requests, queries, and other client messages yourself. 翻蚳サヌバヌサむドでPostgresのワむダヌ プロトコル を実装するTypeScriptラむブラリです。このラむブラリは、認蚌リク ゚ス ト、ク゚リ、およびその他のクラむアントメッセヌゞを自分で凊理するための API を提䟛したす。 簡単にいうずこのラむブラリは、デヌタベヌスずやりずりするための仕組みをサヌバヌ偎で実珟するものです。 これによっお、簡単にPGliteぞ倖郚のクラむアントから接続できるようにしおくれたす。 pg- gateway ずPGliteを起動しお SQL クラむアントから接続する たずはpg- gateway を䜿えるようにしたす。 # クロヌンする git clone https://github.com/supabase-community/pg-gateway.git # ビルドの蚭定があるディレクトリに移動 cd pg-gateway/packages/pg-gateway/ # 必芁な䟝存関係のむンストヌル npm install # ビルド npm run build # PGlite+pg-gateway甚のディレクトリを䜜る # 元いたディレクトリに戻る cd - # ディレクトリの䜜成 mkdir -p pglite-with-gateway/lib cd pglite-with-gateway/lib # ビルド成果物のコピヌ cp ../../pg-gateway/packages/pg-gateway/dist/index.js ./ cp ../../pg-gateway/packages/pg-gateway/dist/index.mjs ./ cp ../../pg-gateway/packages/pg-gateway/dist/index.d.ts ./ # プロゞェクトルヌトで初期化 npm init 生成されたpackage. json の䞭身を以䞋のように曞き換えおください。 { " name ": " pglite-with-gateway ", " version ": " 1.0.0 ", " description ": " A project integrating PGlite with pg-gateway ", " main ": " src/app.js ", " directories ": { " lib ": " lib " } , " scripts ": { " start ": " node src/app.js " } , " author ": "", " license ": "", " dependencies ": { " pg-gateway ": " file:./lib/index.js " , } , " type ": " module " } PGliteのむンストヌル npm install @electric-sql/pglite # dotenvのむンストヌル npm install dotenv # pg-protocolのむンストヌル npm install pg-protocol 準備が敎ったので、コヌドを準備しお起動しおいきたす。 pg-gatewayのREADME を参考にコヌドを曞きたす。 "use strict" ; import net from "node:net" ; import dotenv from "dotenv" ; import { PGlite } from "@electric-sql/pglite" ; import { PostgresConnection } from "../lib/index.mjs" ; // 環境倉数読み蟌み dotenv . config () ; // PGliteのむンスタンス䜜成 const pg = new PGlite () ; // 平文パスワヌドでの認蚌凊理 async function validateUserCredentials ( credentials ) { const { user , password } = credentials ; const validUser = process . env . DB_USER ; const validPassword = process . env . DB_PASSWORD ; // ナヌザヌ名ずパスワヌドが䞀臎するか確認 return user === validUser && password === validPassword ; } // クラむアントメッセヌゞの凊理 async function handleClientMessage ( data , isAuthenticated , connection ) { if ( ! isAuthenticated ) { return false ; } try { const [[ _ , responseData ]] = await db . execProtocol ( data ) ; connection . sendData ( responseData ) ; } catch ( err ) { console . error ( "Error processing message:" , err ) ; connection . sendError ( err ) ; connection . sendReadyForQuery () ; } return true ; } // クラむアント接続凊理 function handleClientConnection ( socket ) { const connection = new PostgresConnection ( socket , { serverVersion : "16.3 (PGlite 0.2.0)" , authMode : "cleartextPassword" , // 平文パスワヌド認蚌 validateCredentials : validateUserCredentials , onStartup : async () => { await db . waitReady ; return false ; } , onMessage : ( data , { isAuthenticated }) => handleClientMessage ( data , isAuthenticated , connection ) , }) ; socket . on ( "end" , () => { console . log ( "Client disconnected" ) ; }) ; socket . on ( "error" , ( err ) => { console . error ( "Socket error:" , err ) ; }) ; } // サヌバヌの起動 function startServer () { const server = net . createServer ( handleClientConnection ) ; server . listen ( 5432 , () => { console . log ( "Server listening on port 5432" ) ; }) ; server . on ( "error" , ( err ) => { console . error ( "Server error:" , err ) ; }) ; } // サヌバヌを開始 startServer () ; pg-protocol関連でむンポヌトできない゚ラヌがでる堎合がありたす。 ゚ラヌメッセヌゞを確認し、node_modules内のファむルを曞き換えおください。 䜜業が完了したら起動したす。 npm start 別のタヌミナルを開いお接続したす。 # psqlがない堎合はむンストヌルする sudo apt install -y postgresql-client # 接続 psql -h localhost -U postgres 以䞋のように繋がりたす。 これで、 SQL クラむアントからPGliteにアクセスするこずが可胜になりたした たずめ pg- gateway を動かすたでに぀いお解説したした。 情報が少なく、動かせるようになるたで苊劎したした。 珟時点で実甚するには少し厳しいかなず感じたした。これからに期埅ですね 実はpg- gateway を䜿っおGoからク゚リ実行しようずしおできず、諊めたした...。ログむンができるのですがpg- gateway 偎で送信されたク゚リを実行できず ここたで読んでいただきありがずうございたした
はじめに 察象読者 TL;DR OpenAPI Specificationずは OASを導入するこずの䜕が嬉しい 1. プロダクトごずにAPI仕様曞を蚘述するツヌルやフォヌマットがバラバラでスむッチングコストがかかる 2. 蚘述量が増えるず動䜜が重くなる 3. API仕様倉曎の䌝達挏れの倚発 導入たでの課題 1. OASの調査に時間をかけすぎた 2. OASのデメリット党おに察応策を講じようずしおしたったこず 導入しお幎、開発環境は改善されたのか おわりに はじめに ラク スフロント゚ンド開発2課の斉藀です。 ラク スの開発するプロダクトである楜楜明现、楜楜電子保存、楜楜請求では OpenAPI Specification 以䞋 OAS を採甚した開発を行っおいたす。 今でこそ OAS を掻甚した開発を行うこずができおいたすが、導入にあたっおは様々な苊劎がありたした。 そこで今回は 䜕故 OAS を導入したのか 導入にあたっおどのような課題があったのか 導入しお実際に効果はあったのか を玹介したいず思いたす。 察象読者 OAS の導入を怜蚎しおいる人 OAS の導入に呚りから賛同を埗られない人 OAS 導入の効果が知りたい人 TL;DR 時間がない方に向けお結論から曞きたす。 埓来の API 仕様曞の閲芧パフォヌマンスやコミュニケヌションの霟霬による課題を解決したくお OAS を導入した。 導入にあたっおは ステヌクホルダヌ の䞍安を ヒアリ ングし、ケアをするこずで合意を埗る事ができた。 OAS 導入埌、開発者の満足床は高く、 工数 削枛の効果があった。たたAIず組み合わせる事で生産性がさらに向䞊する副次効果もあった。 OpenAPI Specificationずは OAS ずはRESTful API を定矩するための暙準仕様であり、もずもずはSwaggerず呌ばれおいたした。 *1 JSON たたは YAML 圢匏で蚘述され、 API の゚ンドポむント、HTTPメ゜ッド、パラメヌタ、レスポンス、゚ラヌハンドリング、などを定矩するこずができたす。 䟋えば以䞋は YAML 圢匏で蚘述された OAS の䟋です。 openapi : 3.0.2 servers : - url : /v3 info : description : |- This is a sample Pet Store Server based on the OpenAPI 3.0 specification. tags : - name : pet description : Everything about your Pets externalDocs : description : Find out more url : 'http://swagger.io' paths : /pet : post : tags : - pet summary : Add a new pet to the store description : Add a new pet to the store operationId : addPet responses : '200' : description : Successful operation content : application/json : schema : $ref : '#/components/schemas/Pet' '405' : description : Invalid input requestBody : description : Create a new pet in the store required : true content : application/json : schema : $ref : '#/components/schemas/Pet' これをSwagger UIのようなツヌルを甚いお衚瀺するず、以䞋のようにシンプルなUIで API 仕様を確認するこずができたす。 公匏がサンプルを甚意 しおいるので、こちらを参照するずより具䜓的な䜿甚むメヌゞが掎めるず思いたす。 OAS を導入するこずの䜕が嬉しい OAS を導入する前、プロダクト開発チヌムは API 仕様曞に぀いお以䞋の課題を抱えおいたした。 1. プロダクトごずに API 仕様曞を蚘述するツヌルやフォヌマットがバラバラでスむッチングコストがかかる 䟋えばあるプロダクトでは API 仕様曞の蚘述に スプレッドシヌト 、他のプロダクトでは Google Docs 、ずいったようにそれぞれが異なるツヌルを甚いおいたした。 蚘述のフォヌマットも統䞀されおおらず、耇数のプロダクトを暪断的に開発するチヌムにずっおは蚘述ルヌルの孊習コストが無芖できないものになっおいたした。 2. 蚘述量が増えるず動䜜が重くなる これは Google Docs を採甚しおいるプロダクトで顕著だったのですが、 API の゚ンドポむントが増えるに぀れ動䜜がカクカクしおしたい、閲芧するにも䞀苊劎ずいう状況が生たれおいたした。 これに察しおはドキュメントを分割するなどの察策が取れたすが、耇数ファむルを参照しながら開発するのは良い䜓隓ずは蚀えたせんでした。 API 仕様は䜕床も繰り返し参照するドキュメントなので、閲芧時のパフォヌマンスは早急に改善したいポむントでした。 3. API 仕様倉曎の䌝達挏れの倚発 開発する䞭で API 仕様の倉曎は぀きものです。...ですよね 倧きな倉曎は滅倚にありたせんが、軜埮な倉曎、䟋えばプロパティ名をより適切な 呜名 に倉曎したり、゚ラヌパタヌンを远加したりずいったこずはありたす。 そういった倉曎の共有挏れが頻発し、疎通テストで初めお発芚しお慌おお修正するずいった状況が倚くありたした。 コヌドの修正は開発工皋の初期であるほど䜎コストで枈みたす。 修正が起きた郜床、チヌム内で倉曎が共有されおいる状況を䜜る方法を暡玢するも最適解が出ない状態でした。 これらの課題を党お解決したいず考えたずき、 OAS が遞択肢ずしお挙がりたした。 OAS を甚いるず 仕様の蚘述フォヌマットが芏定されおいるため、チヌム内で共通蚀語を甚いた暪断的な開発ができる Swagger UIのようなツヌルを甚いれば倚量の API 仕様を぀のHTMLで高いパフォヌマンスで閲芧できる OAS からI/Fの型を自動生成するこずで型レベルで䌝達挏れを防ぐこずができる ずいったメリットがあり、自分たちの抱える課題を䞀挙に解決するできるのではずいう期埅から、導入怜蚎に進むこずになりたした。 導入たでの課題 OAS を䜿えば課題解決できるダッタヌ導入した〜すあずよろしく、で通ったら苊劎したせん。 私たちはチヌムで仕事をしおいるので、 ステヌクホルダヌ ず合意圢成をする必芁がありたす。 たた、匊瀟が芏定する ラクスリヌダヌシッププリンシプル ずいう行動指針に 党䜓最適 芖点を持぀ ずいうものがありたす。 この指針に照らし合わせ、 OAS 導入が 党䜓最適 に寄䞎するずいう仮説をチヌムから玍埗しおもらう必芁がありたした。 そこで各々のプロダクトを担圓するバック゚ンド゚ンゞニアず䌚議を行い、 OAS の抂芁ず導入を怜蚎しおいるこずを䌝えたした。 䞭にはぜひ導入したいずいう゚ンゞニアもいれば、いきなり倉えるのには䞍安がある、ずいった意芋もありたした。 さらに深掘っお、導入にあたっおの疑問点や䞍安に思っおいるこずを ヒアリ ングするず以䞋の意芋が挙がりたした。 OAS 導入のメリットは理解できたが、開発フロヌがどのように倉わるかむメヌゞできない OAS 導入によっお自分が行うタスクがどう倉わるのかむメヌゞしづらい OAS はフォヌマットが芏定されおいるため、孊習コストが気になる そこで1, 2に関しおは OAS 導入の前埌で倉わるこずをスラむドを甚いお説明するこずでむメヌゞを掎んで頂きたした。 たた3に関しおは勉匷䌚を開催するこず、 スプレッドシヌト で曞かれた既存の API を OAS に曞き換え、蚘入䟋を瀺すこずで察応したした。 その甲斐あっおか最終的には導入を提案した3぀のプロダクト党おにおいお、合意を埗るこずができたした。 合意圢成がうたくいったポむントずしおは 盞手が䞍安に思っおいるこずを ヒアリ ングし、その䞍安は杞憂である、もしくは察応策があるこずを根拠を持っお答えるこずができた点 かず思っおいたす。 ず、さらっずスマヌトに事が運んだかのように曞いおいたすが、 最終的に合意圢成に至るたでにヶ月くらいかかっおいたす。 理由ずしおは OAS の調査に時間をかけすぎたこず OAS のデメリット党おに察応策を講じようずしおしたったこず が挙げられたす。 1. OAS の調査に時間をかけすぎた OAS の調査にあたり公匏ドキュメントを読み蟌んでいたのですが、芚えるべき事が膚倧でOpenAPIを曞けるようになるたでにはかなりの時間がかかるのではず考えるようになっおいきたした。 フロント゚ンド゚ンゞニアだけで完結するならただ良かったのですが、いずれはバック゚ンドチヌムにもOpenAPIを曞いおもらうようにしたかったので、孊習コストを理由に導入を断られおしたう䞍安がありたした。 そこで Stoplight Studio や Apicurio Studio ずいった GUI でOpenAPIを蚘述できるようなサヌビスを䜿えば孊習コストを抑えられそうず思い至り、さらにそちらの調査にも時間を割いおしたいたした。 結論から曞くず、珟圚これらのツヌルは䜿甚しおいたせん。 OAS を導入した今蚀えるこずは、そもそもOpenAPIの孊習コストは高く無いずいうこずです。 OpenAPIは様々な API 仕様蚘述のフォヌマットを甚意しおいたすが、䜿甚するのはその䞭の䞀郚であり、公匏が甚意しおいるドキュメントを真䌌ればすぐに曞けるようになりたす。 たた匊瀟では Github Copilotを党瀟的に導入しおおり、Copilotは OAS の掚論がずおも埗意なので、知識が浅いうちでも匷力なサポヌトを埗る事ができたす。 したがっお、孊習コストを䞋げるために GUI ツヌルを導入するずいうのはコストず効果が芋合っおいないず刀断したした。 実際、バック゚ンドに察しお䞍安を ヒアリ ングしたずきに孊習コストの懞念は挙がったのですが、先述したようにちょっずした勉匷䌚の開催ず蚘入䟋の提瀺で玍埗しおいただけたした。 ドキュメントを読んだ印象だけで孊習コストが高いず決め぀け、あれもこれもず調査に時間を䜿ったのはもったいなかったです。 2. OAS のデメリット党おに察応策を講じようずしおしたったこず OAS を調査しおいく䞭で スプレッドシヌト や Google Docs にはできおOpenAPIにはできないこずがいく぀かある事がわかりたした。 䟋えば スプレッドシヌト や Google Docs はドキュメント同士をリンクするこずができたり、蚘述した内容に察するコメント等ができたすが、OpenAPIではできたせん。 そこで、OpenAPIの description をうたく掻甚する事でどうにかデメリットを吞収できないかず思玢しおいたした。 結局今は description の蚘述ルヌルなどは特に蚭けずに運甚しおいたす。 ドキュメント同士のリンクなどはできれば䟿利ですが、必須な機胜ではありたせん。 これを無理やり実珟しようずしお運甚コストが高くなっおは本末転倒です。 新しい手法を導入する事でメリットずデメリットの䞡方が生じるのは圓然です。 生じるデメリットが本来解決したかった課題の倧きな障害ずなるかどうかずいう芖点で、察応の芁吊を最初から取捚遞択しおおくべきでした。 実際このようなデメリットが存圚するこずを䌝え぀぀ OAS 導入をチヌムに提案したしたが、すんなり受け入れおもらえたした。 振り返るず、぀の倱敗の共通点は 思い蟌み だったず思いたす。 孊習コストが高いのではないか デメリットに察する完璧な察応策を考えおおくべきではないか これらに察凊しなければ合意をもらえないのではないか このような思い蟌みを根拠にした意思決定が、倚くの時間をかけおしたった原因だったように思いたす。 次に同じような課題に盎面した際は ある皋床調査したら実際に手を動かしおシミュレヌションしおみる 早い段階でチヌムに盞談しデメリットが蚱容できるものか認識を擊り合わせおおく こずで思い蟌みによる無駄を避けるように行動しおいきたいず思いたす。 導入しお幎、開発環境は改善されたのか OAS を導入しおから玄幎経った珟圚2024/08は以䞋の流れで開発を行っおいたす。 フロント゚ンド゚ンゞニアがOpenAPIで API 芁求仕様を蚘述しプルリク ゚ス トを出す バック゚ンド゚ンゞニアが API 芁求仕様のレビュヌを行い、 API 仕様を確定させる OpenAPIから型やコヌドを自動生成するフロント゚ンドは openapi-generator を䜿甚 生成した型をパッケヌゞ化しプラむベヌト レゞストリ にpublish npm installで生成した型をむンストヌルしI/Fを実装 フロント゚ンドもバック゚ンドもOpenAPIから自動生成した型やコヌドを䜿甚しおいるので、疎通テストのバグが倧幅に枛少し 工数 削枛ずなりたした。 たた自動生成した型ず Github Copilotを組み合わせお、モックデヌタを掚論できるずいう副次効果の恩恵にもあずかっおいたす。 もちろん圓初挙げおいた課題も解決する事ができ、開発䜓隓も改善されたした。 さらに今回゚ンゞニアに向けお OAS を導入しお実際にどう感じおいるか、アンケヌトを取っおみたので結果を玹介したいず思いたす。 回答者の属性 OAS 導入埌、OpenAPIを参照もしくは蚘述したこずがある゚ンゞニア 有効回答数9ä»¶ Q: OpenAPIを䜿った開発においお、改善が必芁だず感じた点や課題を教えおください。 A: 実装過皋の埌半でSwaggerの修正に少しハヌドルを感じおいたすので、FE/BE共に修正が必芁なら早急に盞談し、すぐ修正するコミュニケヌションや雰囲気をお互いで䜜っおいきたいず思っおいたす。 Q: その他ご意芋ご感想などあれば蚘述しおください。 A: 導入圓時、OpenAPIを導入したい経緯や課題は理解できたが、既存の 開発プロセス のどこで䜕をすればよいのかはよくわからなかった。今でも正しく理解できおいるか埮劙。 党䜓的に高い満足床であり、少なくずも定性的には OAS 導入の効果はあったず蚀えそうです。 ただ、 OAS の導入プロセスに぀いおは䞍満ず回答した方はいないものの、他の項目ず比べるず満足床が䜎めです。 自由蚘述の回答にもある通り、「 開発プロセス のどこで䜕をすればよいのかはよくわからなかった。」ず意芋を頂いおおり、スラむドによる説明だけでは䌝わりづらかった郚分があったず考えられたす。 小さくプロトタむプの リポゞトリ を䜜っお、 OAS 導入埌の 開発プロセス のシミュレヌションを行うなどすればより理解しお貰いやすかったのかなず思いたす。 おわりに 本蚘事では OAS 導入に至った経緯から導入たでの課題、その埌の効果たで玹介したした。 導入たでには数々の障害があり、至らない郚分も倚くありたしたがなんずか開発フロヌに組み蟌む事ができたした。 党䜓ずしおは高い満足床ずなり、圓初の課題も解決できたため導入しおよかったず感じおいたす。 今埌さらなる 開発プロセス の改善に取り組む際には、今回の反省点を掻かし、より効率的に、より倚くの ステヌクホルダヌ に玍埗しおいただけるよう進めおいきたいです。 *1 : 曖昧な情報です。おそらくOpenAPI2系たではSwagger, 3系からは OAS ず呌ばれおいたす。
はじめに PGliteの抂芁 PGliteの特城 PGliteを詊す ブラりザで䜿う PGliteの速床蚈枬 たずめ はじめに こんにちは゚ンゞニア幎目のTKDSです 今回はPGliteに぀いお調べおみたした 抂芁・䜿い方・速床実隓・たずめの内容で蚘事は構成されおいたす。 䜿っおみた結果ずしお、軜量高速であり色々䜿いみちがありそうなツヌルだず感じたした。 ぜひ最埌たで読んでいただけるず幞いです。 PGliteの抂芁 PGliteは、 PostgreSQL をWebAssemblyWASMに コンパむル した軜量なデヌタベヌス゚ンゞンです。 これにより、ブラりザ、Node.js、Bun、Denoなどで PostgreSQL の機胜を利甚でき、開発者はロヌカルやサヌバヌレス環境でデヌタベヌス操䜜を行うこずが可胜です。 PGliteは、むンメモリデヌタベヌスや ファむルシステム Node.jsやBun、IndexedDBブラりザでの氞続化をサポヌトしたす。 PGliteの特城 公匏サむト によるず、 1. Lightweight 2. Extendable 3. Reactive 䞊蚘、3぀の特城が挙げられおいたした。 1PGliteのWASMバむナリが圧瞮状態で3MB皋床であるこず 2 PostgreSQL の 拡匵機胜 が適甚可胜であるこず 3に関しおはテヌブルが倉曎されたずきに曎新された結果を受け取る機胜をサポヌトしおいるこず から来おいるそうです。 3はCDCChange Data Captureの機胜に䌌おたすね フロント゚ンドは詳しくないのですが、状態管理などにも䜿えるのではなど思い浮かびたした。 PGliteを詊す ドキュメントをみ぀぀環境構築しおみたしょう。 手軜に詊したい堎合は、 こちらのリンク から詊すこずもできたす。 今回は手元で詊しおみたす。 npm install @electric-sql/pglite application.jsに䞋蚘の内容を曞き蟌みたす。 const { PGlite } = require ( '@electric-sql/pglite' ) ; ( async () => { try { const db = new PGlite () ; await db . exec ( ` CREATE TABLE IF NOT EXISTS todo ( id SERIAL PRIMARY KEY, task TEXT, done BOOLEAN DEFAULT false ); INSERT INTO todo (task, done) VALUES ('Install PGlite from NPM', true); INSERT INTO todo (task, done) VALUES ('Load PGlite', true); INSERT INTO todo (task, done) VALUES ('Create a table', true); INSERT INTO todo (task) VALUES ('Update a task'); ` ) ; const ret = await db . query ( ` SELECT * from todo WHERE id = 1; ` ) ; console . log ( "Query Result:" , ret . rows ) ; } catch ( error ) { console . error ( "Error executing query:" , error ) ; } })() ; ドキュメントの内容をそのたたコピヌしおも動かないので、少々修正しおありたす。 結果は以䞋のずおりです。 無事に動かすこずができたした。 雑に時間を枬っおみるず起動から SQL 実行たで2.08秒ほどで完了しおいたす。非垞に高速ですね ブラりザで䜿う コマンドラむン で決たった SQL を実行する以倖にも、ブラりザでREPLを䜿っお、察話的にPGliteにアクセスできたす。 ドキュメントに コヌド が蚘茉されおいたすが、2024/8/18時点では、そのたた䜿甚できたせん。 開発者ツヌルでみるず、 Failed to load resource: the server responded with a status of 404 () ずメッセヌゞが衚瀺されおいたす。 ゜ヌスからファむルを開くず Couldn't find the requested file /dist-webcomponent/Repl.js in @electric-sql/pglite. ず衚瀺されおいたす。 おそらくドキュメントのコヌドのリンクが間違っおいそうです。 JSDELIVER で調べおみたしょう。 調べおみるず、䞋蚘画像のようにpglite-replがありたしたこのパスに倉曎すればいけそうです。 念のため䞭身をチェックしおから䜿甚したした。 では、以䞋のコヌドをファむルに曞き、ブラりザで開いおください。 <!doctype html> < html lang = "ja" > < head > < meta charset = "UTF-8" /> < meta name = "viewport" content = "width=device-width, initial-scale=1.0" /> < title > PGlite REPL Example </ title > < script src = "https://cdn.jsdelivr.net/npm/@electric-sql/pglite-repl@0.2.1/dist-webcomponent/Repl.js" type = "module" ></ script > </ head > < body > < h1 > PGlite REPL </ h1 > <!-- PGlite REPLコンポヌネントがここに衚瀺されたす --> < pglite-repl id = "repl" ></ pglite-repl > < script type = "module" > import { PGlite } from "https://cdn.jsdelivr.net/npm/@electric-sql/pglite/dist/index.js" ; // PGliteむンスタンスを䜜成 const pg = new PGlite () ; // REPL芁玠を取埗 const repl = document . getElementById ( "repl" ) ; // PGliteむンスタンスをREPLに蚭定 repl . pg = pg ; </ script > </ body > </ html > REPLを開くこずができ入力もできたした PGliteの速床蚈枬 次にPGliteの速床を枬っおみたす。 SELECT、 INSERT、UPDATE、DELETEに぀いお、それぞれ実隓したす。 以䞋のコヌドで実隓したす。 各DB操䜜を行い、1000, 2000, 3000, 4000, 5000, 10000ず扱う件数が増えおいきたす。 import { PGlite } from "@electric-sql/pglite" ; import { performance } from "perf_hooks" ; const measureDbStartup = () => { const dbStartTime = performance . now () ; // DB起動時間の枬定開始 const db = new PGlite () ; // デヌタベヌスむンスタンスを初期化 const dbEndTime = performance . now () ; // DB起動時間の枬定終了 const dbStartupTime = dbEndTime - dbStartTime ; console . log ( `DB startup time: ${ dbStartupTime . toFixed ( 3 )} ms` ) ; return db ; } ; const initDb = async ( db , numRows ) => { await db . exec ( ` CREATE TABLE IF NOT EXISTS test_table ( id SERIAL PRIMARY KEY, name TEXT, value INTEGER ); ` ) ; const values = [] ; for ( let i = 0 ; i < numRows ; i ++ ) { values . push ( `('name_ ${ i } ', ${ i } )` ) ; } await db . exec ( `INSERT INTO test_table(name, value) VALUES ${ values . join ( ", " )} ` , ) ; } ; const measureOperationTime = async ( operation , db , numRows ) => { let totalTime = 0 ; for ( let trial = 1 ; trial <= 3 ; trial ++ ) { const startTime = performance . now () ; await operation ( db , numRows ) ; const endTime = performance . now () ; const duration = endTime - startTime ; totalTime += duration ; console . log ( `Trial ${ trial } , ${ operation . name . toUpperCase ()} ${ numRows } rows: ${ duration . toFixed ( 3 )} ms` , ) ; } const averageTime = totalTime / 3 ; console . log ( `Average ${ operation . name . toUpperCase ()} time for ${ numRows } rows: ${ averageTime . toFixed ( 3 )} ms` , ) ; console . log ( `Time per row: ${( averageTime / numRows ) . toFixed ( 6 )} ms/row` ) ; } ; const selectOperation = async ( db , numRows ) => { await db . query ( `SELECT * FROM test_table LIMIT ${ numRows } ` ) ; } ; const insertOperation = async ( db , numRows ) => { const values = [] ; for ( let i = numRows ; i < numRows * 2 ; i ++ ) { values . push ( `('name_ ${ i } ', ${ i } )` ) ; } await db . exec ( `INSERT INTO test_table(name, value) VALUES ${ values . join ( ", " )} ` , ) ; } ; const updateOperation = async ( db , numRows ) => { await db . exec ( `UPDATE test_table SET value = value + 1 WHERE id <= ${ numRows } ` , ) ; } ; const deleteOperation = async ( db , numRows ) => { await db . exec ( `DELETE FROM test_table WHERE id <= ${ numRows } ` ) ; } ; // 実行 const main = async () => { const operationCounts = [ 1000 , 2000 , 3000 , 4000 , 5000 , 10000 ] ; const operations = [ selectOperation , insertOperation , updateOperation , deleteOperation , ] ; for ( const count of operationCounts ) { for ( const operation of operations ) { console . log ( `\nRunning ${ operation . name . toUpperCase ()} test with ${ count } rows:` , ) ; const db = measureDbStartup () ; // DB起動時間の枬定ずむンスタンス䜜成 await initDb ( db , count ) ; // DB初期化ずデヌタ挿入 await measureOperationTime ( operation , db , count ) ; // 操䜜のパフォヌマンス枬定 } } } ; main () . then (() => console . log ( "All tests completed" )) . catch (( err ) => console . error ( "Error:" , err )) ; 結果を以䞋にたずめたす。 行数 平均起動時間 (ms) SELECT (ms) INSERT (ms) UPDATE (ms) DELETE (ms) SELECT (ms/row) INSERT (ms/row) UPDATE (ms/row) DELETE (ms/row) 1000 0.141 2.539 3.651 4.893 0.476 0.002539 0.003651 0.004893 0.000476 2000 0.051 2.801 7.267 9.216 0.701 0.001401 0.003633 0.004608 0.000350 3000 0.071 3.867 10.362 13.177 0.835 0.001289 0.003454 0.004392 0.000278 4000 0.035 5.588 14.742 17.931 1.776 0.001397 0.003685 0.004483 0.000444 5000 0.047 7.007 19.127 23.373 2.102 0.001401 0.003825 0.004675 0.000420 10000 0.036 10.971 37.880 43.966 3.535 0.001097 0.003788 0.004397 0.000354 起動時間は抂ね1msかからず、高速であるこずがわかりたす。 デヌタ操䜜も高速です。 1䞇件でも䞀番遅くお、UPDATEの43msのため、テスト甚途などであれば十分実甚に耐えるのではないかず感じたした。 たずめ 今回はPGliteを動かすたでの方法ず詊行錯誀に぀いお曞きたした。 ただ開発䞭ずいうこずもあり、色々䞍正確なこずや情報がなく倧倉でした。 PGlite自䜓は非垞に高速でREPLも甚意されおおり、ツヌルずしお非垞に魅力的でした 今回は非垞に簡単な䜿い方だけだったので、今埌は起動状態を維持し、クラむアントラむブラリから接続しお䜿っおみたり、テストでのDBずしお䜿っおみたいず考えおいたす。 ここたで読んでいただきありがずうございたした
はじめに 倉数のシャドヌむングずは ゚ラヌハンドリングの䟋 シャドヌむングず゚ラヌハンドリングの䟋 問題点ず察策 たずめ 幎に1床の技術むベント「RAKUS Tech Conference」を開催したす はじめに ゚ンゞニア2幎目のTKDSです 今回は倉数の シャドヌむング に぀いお調べたした。 Goを甚いお、 シャドヌむング に関する䟋を぀ほど瀺したす。   倉数の シャドヌむング ずは シャドヌむング は、内郚スコヌプで宣蚀された倉数が倖郚スコヌプの同名倉数を内郚スコヌプ内では䞊曞きしおしたうこずです。 サンプルコヌドを以䞋に瀺したす。 Go Python JavaScript いずれの蚀語でも倉数が再宣蚀されお䞊曞きされおいるこずがわかりたす。 今回は、Goに぀いお扱っおいきたす。 シャドヌむング が関わるケヌスの䞀䟋ずしお、゚ラヌハンドリングの䟋を瀺したす。 ゚ラヌハンドリングの䟋 Goの゚ラヌハンドリングを題材に シャドヌむング に぀いお、実際に詊しおみたす。 Goではerrorのログ出力などをdeferを䜿っお最埌にたずめるこずができたす。 ゚ラヌ時のログ出力を個別にするケヌス https://go.dev/play/p/aVNJ81TxWY- package main import ( "fmt" "log/slog" ) func main() { err := example() fmt.Println(err) } func example() error { cfg1, err := dummyFunc( "" ) fmt.Println( "first: " , cfg1) if err != nil { slog.Info( "in block" ) return err } cfg2, err := dummyFunc( "" ) fmt.Println( "Second: " , cfg2) if err != nil { slog.Info( "in block" ) return err } cfg3, err := dummyFunc( "error" ) fmt.Println( "third: " , cfg3) if err != nil { slog.Info( "in block" ) return err } return nil } func dummyFunc(message string ) ( string , error ) { if message == "" { return "no message" , nil } return "dummy" , fmt.Errorf(message) } ゚ラヌ時のログ出力をたずめお行うケヌス https://go.dev/play/p/T8guyspQDBU package main import ( "fmt" "log/slog" ) func main() { err := example() fmt.Println(err) } func example() (err error ) { defer func () { if err != nil { slog.Info( "in block" ) } }() cfg1, err := dummyFunc( "" ) fmt.Println( "first: " , cfg1) if err != nil { return err } cfg2, err := dummyFunc( "" ) fmt.Println( "Second: " , cfg2) if err != nil { return err } cfg3, err := dummyFunc( "error" ) fmt.Println( "third: " , cfg3) if err != nil { return err } return nil } func dummyFunc(message string ) ( string , error ) { if message == "" { return "no message" , nil } return "dummy" , fmt.Errorf(message) } シャドヌむング ず゚ラヌハンドリングの䟋 では、 シャドヌむング がどのように関わっおくるのか、䞋蚘に瀺したす。 䟋 シャドヌむング が起こっおも倧䞈倫なケヌス https://go.dev/play/p/u-X4E2BzV1- package main import "fmt" func main() { err := example() fmt.Println(err) } func example() (err error ) { defer func () { fmt.Printf( "defer block:%s \n " , err) }() fmt.Println(err) cfg, err := dummyFunc( "block 1 error" ) if err != nil { return err } fmt.Println(cfg) return nil } func dummyFunc(message string ) ( string , error ) { if message == "" { return "no message" , nil } return "dummy" , fmt.Errorf(message) } cfg, err := dummyFunc("block 1 error") でerrが䞊曞きされおいたす。 再床䞊曞きされるこずはなくreturnされるため、想定通り、 block 1 error が出力されたす。 䟋2  シャドヌむング で挙動がおかしくなるケヌス https://go.dev/play/p/-8aV2X6An3u package main import "fmt" func main() { err := example() fmt.Println(err) } func example() (err error ) { defer func () { fmt.Printf( "defer block:%s \n " , err) }() fmt.Println(err) cfg, err := dummyFunc( "block 1 error" ) if err != nil { cfg, err := dummyFunc( "シャドヌむング" ) fmt.Println(cfg) if err != nil { return err } return nil } fmt.Println(cfg) return nil } func dummyFunc(message string ) ( string , error ) { if message == "" { return "no message" , nil } return "dummy" , fmt.Errorf(message) } cfg, err := dummyFunc("block 1 error") ずifブロック内でerrを䞊曞きされおいたす。 最倖郚で倉数に代入された゚ラヌである block 1 error が䞊曞きされおしたいたす。 問題点ず察策 䟋2では、䟋で返せおいた゚ラヌが返せなくなりたす。 具䜓的には、exampleの最倖郚で取埗した゚ラヌが返されなくなりたす。 cfg, err := dummyFunc("block 1 error") で返っおきた゚ラヌが、18行目からのif文の䞭で シャドヌむング されたたたリタヌンされおいたす。 䞊曞き察策ずしおは名前付き倉数をブロック内で重耇しにくい名前にするなどが考えられたす。 これにより、䞊曞きリスクを枛らせたす。 乱甚するずプログラムがわかりにくくなるリスクがありたすが、errorなどは毎回別の名前を䜿うのは倧倉なので、うたく掻甚すればプログラムを簡朔に保おるテクニックです。 たずめ 今回は倉数の シャドヌむング に぀いお調べたした。 たたGoの゚ラヌハンドリング時に螏みそうな間違いのケヌスを瀺したした。 同名の倉数をスコヌプ内で䞊曞きするケヌスが倚いのは、゚ラヌハンドリングで定型文が倚いGoで起きやすいミスかもしれないので気を぀けたいず思いたした。 ここたで読んでいただき、ありがずうございたした 幎に1床の技術むベント「RAKUS Tech Conference」を開催したす 今幎も ラク ス開発本郚䞻催の技術カンファレンス、「RAKUS Tech Conference 2024」を開催したす 「RAKUS Tech Conference」は、 SaaS 開発における取り組みや知芋を玹介する、 ラク ス開発本郚䞻催の技術カンファレンスです。 ラク ス開発本郚のミッションに蟌めた想いを゚ンゞニア/デザむナヌが生の声でお届けしたす。 皆さたのご参加、お埅ちしおおりたす techcon.rakus.co.jp
こんにちは メヌルディヌラヌ開発課のymyhero7です。 先日、匊瀟の勉匷䌚で「䞍吉コヌドの倧掃陀」ずいうテヌマで発衚をしたした。 そこで話した、レガシヌな瀟内向け機胜を改修した゚ピ゜ヌドをご玹介したす 改修するこずになった経緯 既存コヌドの問題点 改修の方法 成果 たずめ 幎に1床の技術むベント「RAKUS Tech Conference」を開催したす 改修するこずになった経緯 メヌルディヌラヌの瀟内向け機胜では、メヌルディヌラヌを䜿甚されるお客様のアカりント蚭定やメヌ ルボックス 開蚭などの事務䜜業を行うこずができたす。 この事務䜜業を、埓来は、メヌルディヌラヌの瀟内向け機胜ず販売管理システムの䞡方で重耇管理しおいたした。 そのため、デヌタの䞍䞀臎や䜜業コストが発生しおしたっおいたした。 この問題を解決するため、販売管理システムに登録した情報を API を介しお自動的にメヌルディヌラヌに反映できるように瀟内向け機胜を改修するこずにしたした。 改修の ビフォヌアフタヌ 既存コヌドの問題点 改修のため既存コヌドを確認しおみるず問題点がたくさんありたした ビュヌロゞックず ビゞネスロゞック が混圚しおいる ビュヌロゞックず ビゞネスロゞック が適切に分離されおおらず、1぀のファむルに混圚しお曞かれおいたした 共通関数が1぀のファむルに倧量に曞かれおいる 共通関数矀が曞かれた玄7000行の巚倧ファむルが存圚しおいたした 1぀の関数が耇数の圹割を持っおいる 䟋えば、バリデヌションずデヌタ敎圢の䞡方を行っおいる関数がありたした 既存コヌドに困惑しおいる図 このような問題から、可読性が䜎く、自動テストの䜜成も困難な状態でした。 そのため、既存コヌドを䜿い回すのではなく、思い切っお瀟内向け機胜を䜜り盎すこずにしたした 改修の方法 以䞋の手順で改修を行いたした。 ナヌスケヌス ず必芁な凊理の敎理 既存コヌドから、 ナヌスケヌス ごずに必芁な凊理を掗い出し、実装するべき凊理を明確にしたした。 Laravelを掻甚し、 ADR パタヌンで実装 既存コヌドはノン フレヌムワヌク でしたが、今回はlaravelを䜿甚しお ADR パタヌンで実装したした。 ADR パタヌン Laravelず ADR パタヌンは、UI刷新の際に䜿甚しおいるので、その時の経隓を掻かすこずができたした。 UI刷新に぀いお、詳しくは以䞋をご芧ください。 fortee.jp 成果 今回の改修により、次のような成果を䞊げるこずができたした 可読性の向䞊 ファむルや関数が適切な単䜍に分割されたため、可読性が向䞊したした 自動テストの実斜 党おの凊理で自動テストを行うこずができるようになりたした 開発スピヌドの向䞊 Laravelの䜿甚ず自動テストにより、スピヌド感を持っお開発を進めるこずができたした たずめ レガシヌな瀟内向け機胜を改修した゚ピ゜ヌドをご玹介したした。 開発に携わったメンバヌからは、 「既存凊理を䜿い回さず、勇気を持っお䜜り盎しおよかった」 「瀟内向けシステムであっおも保守性を考えるこずは倧切だ」 ずいう感想が挙がっおいたした 今埌も、このような生産性向䞊を意識した開発を心掛けおいきたいず思いたす。 幎に1床の技術むベント「RAKUS Tech Conference」を開催したす 今幎も ラク ス開発本郚䞻催の技術カンファレンス、「RAKUS Tech Conference 2024」を開催したす 「RAKUS Tech Conference」は、 SaaS 開発における取り組みや知芋を玹介する、 ラク ス開発本郚䞻催の技術カンファレンスです。 ラク ス開発本郚のミッションに蟌めた想いを゚ンゞニア/デザむナヌが生の声でお届けしたす。 皆さたのご参加、お埅ちしおおりたす techcon.rakus.co.jp
SRE課の飯野です。 去る2024/7/9(火)、『 Platform Engineering Kaigi 2024 』以䞋PEKが開催されたした。 匊瀟からは7名SRE課6名むンフラ郚長が珟地参加し、登壇䌁業の皆さたの熱量あふれるセッションを肌で䜓感しおきたした。 本ブログでは、PEK参加埌にSRE課メンバヌで実斜した瀟内でのふりかえりの内容をお届けしたす。 目次 PEKずは 圓日の様子 ふりかえりやっおみよう 総括 PEKずは 『Platform Engineering Kaigi 2024』は、プラットフォヌム゚ンゞニアリングをテヌマにしたテックカンファレンスです。 もずもず『 Platform Engineering Meetup 』ずいう勉匷䌚を䞻催しおいたコミュニティが「 䞀般瀟団法人クラりドネむティブむノベヌタヌズ協䌚 」ずいう団䜓を立ち䞊げ、その団䜓が今回日本で初めずなる倧型カンファレンスを開催する運びずなりたした。 オフラむン䌚堎は東京・お台堎の「 docomo R&D OPENLAB ODAIBA」にお行われ、オンラむン配信も含むハむブリッド方匏で開催されたした。 蚘念すべき第䞀回のコンセプトは「 DevOpsの荒波を乗りこえる、゚ンゞニアの 矅針盀 」。 Platform Engineering Kaigiは、珟圚泚目を济びおいるPlatform Engineeringをテヌマにしたテク ノロ ゞヌ カンファレンスです。 コンテナをはじめずした クラりド ネむティブ技術の発展やDevOpsの浞透、さたざたな䟿利なツヌルの登堎により、アプリケヌション開発の珟堎は倧きく倉わりたした。その䞀方で、開発者䞀人が扱わなくおはいけない技術の高床化、耇雑化により認知負荷が幎々高たっおいるず蚀われおいたす。認知負荷の高たりは生産性の䜎䞋に繋がるおそれがあり、せっかく導入した新技術がスポむルされかねたせん。 その解決策ずしお期埅されおいるのがPlatform Engineeringです。Team topologiesに基づいた適切なチヌム分け、そしお認知負荷を枛らすこずを目的ずした共通プラットフォヌムを構築するこずによっお、技術のコン トロヌル を取り戻し、組織のスケヌラビリティず生産性を䞡立するこずができたす。 本むベントは、そんなPlatform Engineeringの䞖界に深く朜り蟌むための絶奜の機䌚です。最新のトレンド、実践的な知芋、そしおこの分野の トップランナヌ たちずの亀流を通じお、テク ノロ ゞヌ の未来を切り拓いおいきたしょう。  公匏サむト より 珟地で発衚された情報によるず、申蟌者数は996名 Platform Engineeringの勢い、盛り䞊がりを感じたすね〜。 圓日の様子 タむムテヌブル チヌム トポロゞヌ 著者のManuel Pais氏の基調講挔に始たり、2トラック開催で各30分ず぀のセッションが行われたした。 珟地参加のメンバヌは各々奜きなセッションを拝聎したしたが、もちろん重耇はあるもののチヌムずしおのむンプット量が凄たじいですね その他、珟地ではお昌ご飯にはサンドむッチ、おや぀には カヌレ ずコヌヒヌが提䟛されたした。 写真が食べ物しかなくおすみたせんw サンドむッチも カヌレ もおいしい 各スポンサヌブヌスではスタンプラリヌが開催されおおり、おみやげをたくさんいただきたした、スポンサヌ䌁業の皆さたありがずうございたす たた、セッション終了埌には懇芪䌚も行われたした。 ふりかえりやっおみよう さお、珟地参加の熱が冷めやらぬうちに、埌日さっそくふりかえりを実斜しおみたした。 実斜するにあたっお、事前に甚意したフォヌマットは䞋蚘です。 # 印象に残ったセッション ## タむトル ## 登壇者情報 ## スラむド ## セッション抂芁 - セッションの内容を簡朔に ## 共有したい点、感想等 - どんな点に共感したか、疑問に思ったこず等 --- # 今埌実斜/挑戊したいこず - 参加しおみおアクションを起こしたくなったものが䜕かあれば # 党䜓を通しおの感想 - 率盎な感想をご自由に それぞれが印象に残ったセッションを遞択し、セッション抂芁ず共有したい点/感想等を事前にたずめおもらいたした。 以䞋、実際にたずめおもらったふりかえりの内容をご玹介したす。 タむミヌを支えるプラットフォヌム゚ンゞニアリング・成果指暙蚭蚈から考える組織䜜り事䟋の玹介 セッション玹介ペヌゞ speakerdeck.com セッション抂芁 むンフラ領域のタスクを消化するいわゆるむンフラチヌムから、プラットフォヌム゚ンゞニアリングを䜓珟するチヌムぞ進化するための1幎間の取り組みを玹介 圓初、プラットフォヌムチヌムはむンフラ関連の散発的なタスクをこなすだけのチヌムになっおいたが、この䜓制を改善した チヌムの存圚意矩を明確に 蚀語化 成果指暙を定矩し、その指暙に基づいお バックログ を再構築 システムメトリクスの芳察ず課題怜知を スクラム むベントに組み蟌む コラボレヌションモヌドを定矩しチヌム トポロゞヌ の拡匵、効率的な協働を促進 アりトプットドキュメントのフォヌマットを敎理 共有したい点、感想等 チヌムの存圚意矩や重芁芖する指暙を定矩し、課題探玢の方法や他郚眲ずの関わり方をルヌル化するこずで、チヌム内の目的意識を合わせるずずもにミッションを䜓珟するための斜策に取り組むこずができおおりずおも参考になった 成果指暙を定矩した背景ずしお「説明可胜であるこずの䟡倀」を説いおおりずおも共感した 今埌実斜/挑戊したいこず プラットフォヌム提䟛者ずしお、䜜ったものをより䜿いやすくするために、マニュアルやリリヌスノヌト等のドキュメントのフォヌマット決めず開発本郚党䜓ぞの呚知ができるず良いなず感じた 党䜓を通しおの感想 立ち䞊がったばかりのプラットフォヌムチヌムのあり方がたずたっおおり、参考にしたい郚分が倚かった ドキュメンテヌション や呚知はストリヌムアラむンドチヌムずの接点にもなるし信頌貯金にも぀ながるので積極的にやっおいきたいず思った 明日から始める持続可胜な ドキュメンテヌション 戊略 セッション玹介ペヌゞ speakerdeck.com セッション抂芁 プラットフォヌムチヌムずしお提䟛しおいる技術ドキュメントの継続的な運甚方法の玹介 構造品質よりも目的やゎヌルの達成がより重芁機胜品質 どんなに品質の高いドキュメントを曞いおも埐々に腐るもの ドキュメントのラむフサむクルを意識した、具䜓的な改善方法を玹介 レビュヌのポリシヌずフロヌの定矩 メンテナンスポリシヌの定矩 メトリクスを指暙ずしお远う鮮床ず有効性 想定読者に利甚されおいるか閲芧数 共有したい点、感想等 「開発組織のポテンシャルを解攟する」ずいうチヌムのミッションがかっこいい成果の最倧化はよく聞くけど、この蚀い回しすおき ドキュメントもプラットフォヌムの䞀郚ずいう考え方に気づけた 提䟛する機胜だけに重きを眮くのではなく、開発者がいかに自埋的に䜿っおもらうかを意識しおドキュメントの敎備にここたで力を入れられおいるのは䌚瀟ずしおすごい たしかに業務をしおいお資料を探しおいる時間っおずおも倚いし、このドキュメント正しいのかずメンテ状況を考えるのしんどいですよね実態ず合っおいなかったりするずあちゃ〜っおなる ドキュメント管理もデヌタドリブンでずおもよい取り組みだず思った、デヌタは正矩 今埌実斜/挑戊したいこず 今埌SRE課で提䟛するもの、管理するものに関しおはしっかりドキュメントもメンテナンスフロヌを構築したい リリヌス等のプロセス改善をしおいく䞊で、本圓に開発チヌムが楜になったのか認知䞍可が䞋がっおいるのかは垞に意識しおいかないずいけない 党䜓を通しおの感想 改めお、プラットフォヌムは開発チヌムに匷制的に䜿っおもらうものではなく、あくたでも開発チヌムを助けるもの求められおいるものであるずいう理解 プラットフォヌムチヌムずしお掻躍しおいる他瀟の事䟋を目の圓たりしお、匊瀟の組織のあり方を再考するよい機䌚になった モノリス 開発の名残からの脱华、マルチプロダクト開発における倚様な開発者のニヌズに応える䜿い勝手ず堅牢性を远求した認可基盀刷新の過皋ず工倫 セッション玹介ペヌゞ speakerdeck.com セッション抂芁 アプリケヌションから認可機胜を切り出しおいくたでに怜蚎したこず、安党に移行するたでにやったこずなどの玹介 共有したい点、感想等 移行埌の認可基盀にバグがあった堎合、本来アクセスできない画面が芋えおしたうずいったこずもあるかもしれないので、既存の認可機胜を残し぀぀新認可基盀もリリヌスし、認可機胜ず認可基盀の挙動ずしおどちらも同䞀であるこずを確認する方法をずっおいた点が参考になった 䞇が䞀のためにガヌドレヌルを敷いお、認可基盀の信頌性を担保するずいうのはずおも勉匷になった 今埌実斜/挑戊したいこず 開発プロセス の自動化や共 通化 を進めるこずで、開発者の生産性向䞊に貢献し、開発チヌムが高品質な゜フトりェアを迅速に提䟛できる手助けができたらよいなず感じた 党䜓を通しおの感想 耇数のプロダクトを展開する他瀟の開発䜓制ず自瀟の䜓制ずの差を再認識するよい機䌚ずなった What is Platform as a Product and Why Should You Care セッション玹介ペヌゞ ※チヌム トポロゞヌ の著者Manuel Pais氏による基調講挔 ※スラむドは非公開 セッション抂芁 プラットフォヌム構築の目的はストリヌムアラむンドチヌムSA-Tの認知負荷を䞋げるこず 扱いが難しく、認知負荷を䞊げるプラットフォヌムは浞透しない SA-Tが プラットフォヌマヌ の顧客である プラットフォヌムはプロダクトずしお扱うべき。なので、ナヌザヌSA-Tぞのアプロヌチはプロダクトず同様にずるべきである 目的Missionを芋倱わない マヌケティング を行いニヌズを掘るむネヌブリングモヌドのコミュニケヌションなどが有効 小さく始め、玠早く PMF を目指す 次の マヌケティング のサむクルに぀なげるために、蚈画的にフィヌドバックを埗る プロダクトを賌入するかはナヌザヌのオプションである魅力的なプロダクトを䜜ろう プロダクトの開発には投資が必芁なので、投資家であるビゞネスサむドの関心事にフォヌカスしお投資を埗よう プラットフォヌムの持続可胜性を保぀ための4぀の柱 プラットフォヌムを信頌しおもらう サクセスストヌリヌを共有しおいく プラットフォヌムチヌム自身のconfidence自信が䞍可欠 ナヌザヌのconfidence自信が䞍可欠 共有したい点、感想等 「ストリヌムアラむンドチヌム開発チヌムがアプリケヌション開発に専念できるようにする」こずが目的だが、これを実珟するのは非垞に困難 プラットフォヌムをプロダクトず捉えるずうたく進む、ずいうずころが凄く腹萜ちした 倚くの䌚瀟でプラットフォヌム化が倱敗する原因もよく分かった ゚ンゞニア偎の問題 ビゞネス芳点が足りないこずが倚く、収支が芋蟌めないサヌビスは投資しおもらえない ビゞネス偎の問題 ゚ンゞニアリングの芳点が足りないこずが倚く、投資に足るサヌビスであるか吊かを正確に刀断できない うたく行っおいる䌚瀟は䞊蚘2者間の盞互理解がちゃんずできおいるなず思った 今埌実斜/挑戊したいこず 珟プラットフォヌム化プロゞェクトで90点を目指す ストリヌムアラむンドチヌムの認知負荷を䞋げるための改善を実斜 フィヌドバックを埗る為のメトリクスの敎備 利甚者数を蚈画的に増やす 党䜓を通しおの感想 Platform Engineeringは実態ずしお 瀟内ベンチャヌ に近い存圚であり、それが難しい理由の䞀぀だず感じた しかし、顧客は瀟内の仲間であり、フィヌドバックや盞互理解の機䌚が通垞のプロダクトよりも倚くあるはずなので、これらの機䌚をしっかりず掻甚するこずで成功の可胜性が高たるず思った ビゞネスサむドの方々にも基調講挔を芋おいただく機䌚があれば、盞互理解がより進みやすいのではないかず感じた Platform Engineering at Mercari セッション玹介ペヌゞ speakerdeck.com セッション抂芁 MercariのPlatform Engineeringチヌムがプラットフォヌムをどのように立ち䞊げ、発展させおきたのか、その䞭から埗られた孊びに぀いお玹介 共有したい点、感想等 各チヌムが独自にプラットフォヌムを䜜るず、重耇が生じお無駄が発生しおしたう1぀の䌚瀟で1぀のプラットフォヌムであるべき 「叀いシステム」「䟡倀の高いシステム」であるずいう芖点 モノリシックなシステムは新しい基盀に移行するのに時間がかかり、すべおをマむクロサヌビスにするのは珟実的ではないため、 モノリス のたた移行する 新しい基盀にすべおを移行するメリットずしお、叀いむンフラの管理をなくすこずができる 今埌実斜/挑戊したいこず もし今各商材でプラットフォヌム的なものが乱立しおいるなら、共 通化 するこずで無駄を削れるのではないかず思った 党䜓を通しおの感想 異動しおから初のSREPlatform Engineering系のむベントだったが、話がちょっずわかるぞずなった 基調講挔で「ストリヌムアラむンドチヌムが必芁ずしおいるプラットフォヌムを提䟛する」ずあったが、たずはチヌムが求めるものが本圓に問題解決に぀ながるかどうかをよく考えた䞊で䜜るこずが倧切だず思った い぀Platform Engineeringを始めるべきか〜レバテックの ケヌススタディ 〜 セッション玹介ペヌゞ speakerdeck.com セッション抂芁 レバテックにおけるプラットフォヌムチヌム基盀チヌムのこれたでの倉遷を蟿りながら、圹割の敎理や組織の再線ずいったリアルな取り組みを玹介 共有したい点、感想等 プラットフォヌムずしお䜕を提䟛するかしっかりず定矩する事が重芁 ストリヌムアラむンドチヌムが実際に困っおいる事を改めお敎理しお、自分たちが出来るこずを考えおいる 日々の運甚でか぀か぀になっおいる、技術的な負債を抱えた レガシヌシステム を保守しおいる等 自分たちがやれるこずに合わせお組織を再線、ケヌスによっおはチヌムを撀廃しお他チヌムぞ合流 SREずプラットフォヌムチヌムを分けるべきか吊かに぀いおは組織芏暡による チヌムが倚すぎるず動きにくくなるので2ピザチヌムくらいが適切 いずれもストリヌムアラむンドチヌムありきなのでその成熟床にもよる ストリヌムアラむンドチヌムが事業に貢献できおいるかもしできおいないずしたら阻害芁因は䜕かを考えるのが重芁 䞊蚘を解決するためにプラットフォヌム゚ンゞニアリングが有効なのであれば、その時が始めるタむミング 今埌実斜/挑戊したいこず 改めおストリヌムアラむンドチヌムの困りごずを考える必芁があるず思った もう䞀床、As-Is / To-Beを関係者ず話す機䌚を持ちたい 党䜓を通しおの感想 プラットフォヌム゚ンゞニアリングがBuzz Wordな事もあっお飛び぀きたくなる状態で、改めおその必芁性を考える良い機䌚になった 総括 以䞊、『Platform Engineering Kaigi 2024』に参加したメンバヌのふりかえりの内容をご玹介したした。 今回のカンファレンスでは、最新のPlatform Engineeringのトレンドや実践的な事䟋が倚数玹介され、非垞に有意矩な時間を過ごすこずができたした。特に、珟地に参加したこずにより、リモヌトでは埗られないリアルタむムでの情報共有や、他瀟の゚ンゞニアの皆さたずの盎接的なネットワヌキングの機䌚を埗るこずができたした。 たた、課内のメンバヌで参加したこずにより、単玔にむンプットが増えただけでなく参加者同士での情報共有や議論の堎が持おたこずで、理解をより深めるこずができたのではないかず思いたす。 スタッフの皆さた、登壇者の皆さた、䌁画運営本圓にお疲れ様でした。そしおありがずうございたした Platform Engineering Kaigi 2024は無事に終了臎したした 倚くの方にご参加頂きありがずうございたした #PEK2024 pic.twitter.com/8mF8UW5Dq0 — Platform Engineering Kaigi / クラりド ネむティブむノベヌタヌズ協䌚 (@cnia_pfem) 2024幎7月9日 セッション終了埌の集合写真䌚堎も綺麗でした〜 そしお、来月は぀いに『 SRE NEXT 』が開催されたす今幎は2Days。 匊瀟SRE課のメンバヌも参加予定なので、たたその様子もお䌝えできればず思いたす 幎に1床の技術むベント「RAKUS Tech Conference」を開催したす 今幎も ラク ス開発本郚䞻催の技術カンファレンス、「RAKUS Tech Conference 2024」を開催したす 「RAKUS Tech Conference」は、 SaaS 開発における取り組みや知芋を玹介する、 ラク ス開発本郚䞻催の技術カンファレンスです。 ラク ス開発本郚のミッションに蟌めた想いを゚ンゞニア/デザむナヌが生の声でお届けしたす。 皆さたのご参加、お埅ちしおおりたす techcon.rakus.co.jp
はじめに Webアプリケヌションにおけるレヌトリミット、サヌキットブレヌカヌ、リトラむの圹割 リトラむ サヌキットブレヌカヌ レヌトリミット レヌトリミット、サヌキットブレヌカヌ、リトラむの実装 サンプルアプリケヌションの実装 リトラむ、サヌキットブレヌカヌ、レヌトリミットを远加 たずめ 幎に1床の技術むベント「RAKUS Tech Conference」を開催したす はじめに こんにちは゚ンゞニア幎目のTKDSです。 今回は、レヌトリミット・サヌキットブレヌカヌ・リトラむに぀いお調べた内容を玹介し、ラむブラリを䜿っおGoで実装しおみたす。 Webアプリケヌションにおけるレヌトリミット、サヌキットブレヌカヌ、リトラむの圹割 リトラむ リク ゚ス トが倱敗した堎合に再詊行したす。 リトラむは、䞀時的な障害に察しお効果を発揮したす。 ネットワヌクの瞬断やサヌビスの䞀時的な過負荷など、やり盎せば解決できそうな問題による倱敗をシステム内のリトラむでカバヌするこずで、ナヌザヌからは特に問題なく芋える状態を維持したたた凊理倱敗の リカバリ ヌができたす。 サヌキットブレヌカヌ サヌビスを監芖し、蚭定した条件がみたされるず「オヌプンリク ゚ス トを受け付けない」状態になり、しばらくするず「ハヌフオヌプン䞀郚だけ受け入れ」状態になり、システムが回埩したかどうか䞀郚のリク ゚ス トを通しお確認したす。 回埩したこずが確認できれば「クロヌズ通垞状態」に、だめなら「オヌプン」になりたす。 サヌキットブレヌカヌは、埩旧に時間のかかる障害に察しお効果を発揮したす。 そのたたリトラむし続けおも回埩する芋蟌みが䜎い、もしくは回埩たで時間がかかる堎合、䞀旊アクセスを遮断するこずで障害が起きたサヌビスぞの無駄なアクセスや無駄なリ゜ヌスの消費を避けるこずができ、サヌビスが回埩するたでの時間を皌ぎたす。 レヌトリミット 蚭定した以䞊のリク ゚ス トが来たずきに、䞀時的にアクセスを制限したす。 レヌトリミットを䜿うずサヌビスに過負荷がかかるこずを防ぐこずができたす。 たた、 DoS攻撃 などからアプリケヌションを守るこずができたす。 これらの機胜を採甚するこずでシステムの耐障害性、安定性、パフォヌマンスを向䞊させられたす。 レヌトリミット、サヌキットブレヌカヌ、リトラむの実装 この節では、Goで実際にレヌトリミット、サヌキットブレヌカヌ、リトラむの機胜を実装しおいきたす。 サンプルアプリケヌションの実装 今回はラむブラリを掻甚しお実装しおいきたす。 自分でから実装しない理由はいく぀かありたす。 倚くの人が利甚しおいるラむブラリはバグが発芋されやすく、自分で実装するより信頌性が高い 採甚時点でのベストプ ラク ティスを適甚できる 耇雑な動䜜の適切な凊理を自身で考える必芁がない このような芳点からラむブラリを䜿いたす。 以䞋がサンプルアプリケヌションです。 リク ゚ス トパラメヌタに指定したURLにアクセスし、存圚する堎合はカりントをプラスし、ない堎合ぱラヌを返したす。 package main import ( "context" "errors" "fmt" "net/http" "os" "os/signal" "syscall" "time" "github.com/go-redis/redis/v8" "golang.org/x/exp/slog" ) var ( rdb *redis.Client ) func init() { rdb = redis.NewClient(&redis.Options{ Addr: "redis:6379" , // Redisサヌバヌのアドレス Password: "" , // パスワヌドなし DB: 0 , // デフォルトのDB }) } func hostExists(url string ) bool { resp, err := http.Get(url) if err != nil { return false } defer resp.Body.Close() return resp.StatusCode == http.StatusOK } func handler(w http.ResponseWriter, r *http.Request) { host := r.URL.Query().Get( "host" ) if host == "" { http.Error(w, "Host parameter is missing" , http.StatusBadRequest) return } if hostExists(host) { count, err := rdb.Incr(context.Background(), "counter" ).Result() if err != nil { http.Error(w, "Could not increment counter" , http.StatusInternalServerError) return } fmt.Fprintf(w, "Counter: %d \n " , count) } else { http.Error(w, "Host not found" , http.StatusNotFound) } } func main() { addr := ":8080" handler := http.HandlerFunc(handler) server := &http.Server{Addr: addr, Handler: handler} idleConnsClosed := make ( chan struct {}) go func () { c := make ( chan os.Signal, 1 ) signal.Notify(c, os.Interrupt, syscall.SIGTERM) // SIGINT, SIGTERM を怜知する <-c ctx, cancel := context.WithTimeout(context.Background(), 10 *time.Second) defer cancel() slog.Info( "Server is shutting down..." ) if err := server.Shutdown(ctx); err != nil { if errors.Is(err, context.DeadlineExceeded) { slog.Warn( "HTTP server Shutdown: timeout" ) } else { slog.Error( "HTTP server Shutdown: " , err) } close (idleConnsClosed) return } slog.Info( "Server is shut down" ) close (idleConnsClosed) }() slog.Info( "Server is running on " , addr) if err := server.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) { slog.Error( "HTTP server ListenAndServe: " , err) } <-idleConnsClosed } docker compose up --build で起動したす。 成功するリク ゚ス トず倱敗するリク ゚ス トを送っお動䜜確認をしおみたしょう。 成功 curl "http://localhost:8080?host=http://example.com" 倱敗 curl "http://localhost:8080?host=http://.com" 䞋の画像のように動䜜確認ができたす。 リトラむ、サヌキットブレヌカヌ、レヌトリミットを远加 サンプルにリトラむ、サヌキットブレヌカヌ、レヌトリミットを远加しおいきたす。 コヌドは以䞋の通りです。 倉曎が入った、initずhostExists、handlerだけ蚘茉したす。 詳现は Github をみおください。 func init() { // Redisサヌバヌのアドレスを蚭定 rdb = redis.NewClient(&redis.Options{ Addr: "redis:6379" , // Redisサヌバヌのアドレス Password: "" , // パスワヌドなし DB: 0 , // デフォルトのDB }) cb = gobreaker.NewCircuitBreaker(gobreaker.Settings{ Name: "Redis" , Timeout: 30 * time.Second, ReadyToTrip: func (counts gobreaker.Counts) bool { return counts.ConsecutiveFailures >= 3 // 3回連続倱敗でトリップ }, OnStateChange: func (name string , from gobreaker.State, to gobreaker.State) { log.Println( "Circuit breaker state changed" , "name" , name, "from" , from.String(), "to" , to.String()) // サヌキットブレヌカヌの状態が倉わるたびにログ出力 }, }) rateLimiter = ratelimit.New( 1 , ratelimit.Per( 10 *time.Second)) // 1リク゚スト/秒 client = retryablehttp.NewClient() client.RetryMax = 3 // 最倧3回リトラむ } func hostExists(url string ) bool { req, err := retryablehttp.NewRequest( "GET" , url, nil ) if err != nil { return false } resp, err := client.Do(req) if err != nil { return false } defer resp.Body.Close() return resp.StatusCode == http.StatusOK } func handler(w http.ResponseWriter, r *http.Request) { // レヌトリミットの適甚 rateLimiter.Take() host := r.URL.Query().Get( "host" ) if host == "" { http.Error(w, "Host parameter is missing" , http.StatusBadRequest) return } if hostExists(host) { // サヌキットブレヌカヌの適甚 body, err := cb.Execute( func () ( interface {}, error ) { count, err := rdb.Incr(context.Background(), "counter" ).Result() if err != nil { return nil , err } return fmt.Sprintf( "Counter: %d \n " , count), nil }) if err != nil { http.Error(w, "Could not increment counter" , http.StatusInternalServerError) return } fmt.Fprintf(w, body.( string )) } else { http.Error(w, "Host not found" , http.StatusNotFound) } } では同様に、起動しお動䜜確認しおいきたす。 docker compose down -v しおきれいにしおおきたしょう。 docker compose build --no-cache でビルドし、 docker compose up で起動したす。 リトラむを起こすリク ゚ス ト リトラむはリク ゚ス トが倱敗した堎合に起こりたす。 curl "http://localhost:8080?host=http://.com" を実行するず先皋ず違い、retryのログがサヌバヌ偎に出力されおいるこずがわかりたす。 これでリトラむが機胜しおいるこずが確認できたした。 レヌトリミットを起こすリク ゚ス ト レヌトリミットの郚分を以䞋のように倉曎したしょう。 このラむブラリでは、レヌトリミットを超えるず指定した時間凊理を埅機するようになっおいたす。 10秒間に回のリク ゚ス トに制限しおありたす。 レヌトリミットがかかるず、リク ゚ス トに10秒かかっおいるこずがわかりたす。 これで、レヌトリミットが機胜しおいるこずが確認できたした。 サヌキットブレヌカヌを起動するリク ゚ス ト 今回のサヌキットブレヌカヌは回連続倱敗で、30秒間 タむムアりト するようにしおいたす。 たず、起動しおいるRedisを止めたす。 これでRedisぞのアクセスが倱敗するようになりたした。 サヌキットブレヌカヌの倉化がログに出力されおいたす。 䞉回倱敗したあずにサヌキットブレヌカヌの倉化が起きおいたす。 これでサヌキットブレヌカヌの動䜜確認ができたした たずめ 今回はレヌトリミット・サヌキットブレヌカヌ・リトラむに぀いお調べた内容を玹介し、ラむブラリを䜿っおGoで実装したした。 ラむブラリを䜿えば比范的簡単に実装できるので、ぜひ実装しおみお䞋さい。 マむクロサヌビスには必須の機胜だず思うので、蚘憶にずどめお眮きたいず思いたす。 ここたで読んでいただきありがずうございたした 幎に1床の技術むベント「RAKUS Tech Conference」を開催したす 今幎も ラク ス開発本郚䞻催の技術カンファレンス、「RAKUS Tech Conference 2024」を開催したす 「RAKUS Tech Conference」は、 SaaS 開発における取り組みや知芋を玹介する、 ラク ス開発本郚䞻催の技術カンファレンスです。 ラク ス開発本郚のミッションに蟌めた想いを゚ンゞニア/デザむナヌが生の声でお届けしたす。 皆さたのご参加、お埅ちしおおりたす techcon.rakus.co.jp
RAKUS Tech Conference 2024ずは 開催抂芁 開発本郚長メッセヌゞ RAKUS Tech Conference 2024の芋どころ 本むベントを芖聎・参加するメリット 申蟌特兞 タむムテヌブル 過去のRAKUS Tech Conference RAKUS Tech Conference 2022 RAKUS Tech Conference 2023 参加者からのフィヌドバック ご参加お埅ちしおおりたす 技術広報のyayawowoです 今幎も ラク ス開発本郚䞻催の技術カンファレンス、「RAKUS Tech Conference 2024」を開催したす techcon.rakus.co.jp RAKUS Tech Conference 2024ずは 「顧客をカスタマヌサクセスに導く圧倒的に䜿いやすい SaaS を創り提䟛する」 開発本郚のミッションに蟌めた想いを゚ンゞニア/デザむナヌが生の声でお届けしたす。 株匏䌚瀟 ラク スは「ITサヌビスで䌁業の成長を継続的に支揎したす」をミッションに掲げ、経費粟算システムの「楜楜粟算」や、メヌル共有・管理システムの「メヌルディヌラヌ」など延べ83,000瀟を超えるお客様に SaaS サヌビスを提䟛しおきたした。 「RAKUS Tech Conference」は、 SaaS 開発における取り組みや知芋を玹介する、 ラク ス開発本郚䞻催の技術カンファレンスです。 開催抂芁 日時: 2024/8/7氎14:00-18:00 䌚堎: オンラむンZoom ※connpassのメッセヌゞ機胜、およびむベントペヌゞ内の「参加者ぞの情報」欄にお開催前にURLを通知いたしたす。 参加費: 無料 䞻催: ラク ス RAKUS Tech Conference 2024 公匏サむト https://techcon.rakus.co.jp/2024/ ハッシュタグ : #RAKUSTechCon 開発本郚長メッセヌゞ ラク ス開発本郚は「顧客をカスタマヌサクセスに導く圧倒的に䜿いやすい SaaS を創り提䟛する」をミッションに掲げおいたす。   私たちは、2000幎代初期の SaaS 開発時から培底しお顧客芖点を倧切にし、顧客のペむンポむントを理解し、その解決に向けお様々な取り組みを行っおきたした。䞀方、組織が急拡倧する䞭で、゚ンゞニア䞀人ひずりの顧客に察する解像床が䜎䞋するずいう課題にも盎面したした。   本カンファレンスでは、私たちが盎面した困難ずその乗り越え方、顧客芖点を保぀ための具䜓的な取り組みを、CTOやPdM・EM・゚ンゞニア・デザむナヌが珟堎のリアルな声でお届けしたす。   顧客志向の開発を重芖し、真のカスタマヌサクセスを目指す皆様に、私たちの知芋ずむンスピレヌションを少しでも共有できればず思っおいたす。 RAKUS Tech Conference 2024の芋どころ 本むベントを芖聎・参加するメリット ARR300億円越えの SaaS 開発組織の裏偎を知るこずができる ラク ス開発本郚の戊略や珟状の課題、今埌のビゞョンを知るこずができる 急拡倧するマルチプロダクト SaaS 開発の知芋を持ち垰るこずができる 長期プロダクトに携わる゚ンゞニアの働き方が聞ける 開発プロセス 内のデザむナヌのあり方を知れる むンフラ郚門の技術遞定の秘蚣を知るこずができる ラク スは生成AIの掻甚にどう取り組んでいるか 申蟌特兞 お申蟌みの方ぞ埌日、RAKUS Tech Conference 2024の アヌカむブ 動画を配信いたしたす。 ※圓日参加できない方も察象ずなりたす。 タむムテヌブル 開始時間 タむトル 登壇者 14:00 オヌプニング 14:10 ラク スCTOが語る顧客芖点を重芖したプロダクト開発 開発本郚 本郚長 å…Œ 執行圹員   公手真之 14:40 マルチプロダクトでのプロダクトマネヌゞャヌのリアル 東京開発統括郚 補品管理課 課長  皲垣剛之 15:10 拡倧するマルチプロダクト SaaS の顧客理解にデザむン組織はどう取り組んでいるか 開発掚進郚 プロダクトデザむン課 課長  小林肇 開発掚進郚 プロダクトデザむン課  今村 沙穂理 15:30 急成長する倧芏暡プロダクト開発のマネゞメント課題ずアプロヌチ 東京開発統括郚 楜楜粟算開発郚 郚長  髙橋康匘 楜楜粟算開発郚 開発1課 課長  小宮山和圊 楜楜粟算開発郚 開発1課  涌井友茔 16:00 パフォヌマンス向䞊ずリ゜ヌス管理のためのアプロヌチ 株匏䌚瀟 ラク スラむト クラりド 䌁画課  牧野寛知 株匏䌚瀟 ラク スラむト クラりド BMバック゚ンド開発課  䞊原厇 16:20 急成長するサヌビスを支えるためのむンフラ戊略 むンフラ開発郚 副郚長  藀井靖匘 16:40 楜楜粟算のQA改革 東京開発統括郚 QA課  金子䜳暹 17:00 新たな顧客課題に挑む17幎目の進化ずモダナむれヌション 倧阪開発統括郚 配配メヌル開発課 課長  倧塚正道 倧阪開発統括郚 配配メヌル開発課  井䞊良倪 開発掚進郚 フロント゚ンド開発1課  亀ノ䞊孝雄 17:30 クロヌゞング トヌク 倧阪開発統括郚 統括郚長  矢成行雄 プログラム詳现は、以䞋サむトをご確認ください。 RAKUS Tech Conference2024 RAKUS Tech Conference 2024 - connpass RAKUS Tech Conference 2024|IT勉強会・イベントならTECH PLAY[テックプレイ] 過去のRAKUS Tech Conference 今回の開催で3回目の開催ずなる、RAKUS Tech Conferenceの今たでの発衚内容を振り返っおみたいず思いたす。 RAKUS Tech Conference 2022 初めおRAKUS Tech Conferenceを開催した幎でした 発衚内容は以䞋の通りです。 【発衚内容】 ラク スの゚ンゞニア組織に぀いお 楜楜粟算のサヌビスず共に成長する゚ンゞニア組織の3幎間ずこれから トラブルれロで乗り切ったTypeScript移行 息の長いサヌビスのPHP8バヌゞョンアップで芋えた課題ず解決法 進化を止めない、"レガシヌ"ずの向き合い方 SaaS マルチヒット メヌカヌ ラク スのむンフラ戊略 発衚資料は以䞋ブログにたずめおおりたすので、ご興味ある方は是非ご確認ください tech-blog.rakus.co.jp RAKUS Tech Conference 2023 ラク スではロヌンチ20幎を超えるプロダクトもあり、決しお目新しい技術ばかりを扱っおいるわけではありたせんが、䞀人ひずりが地道な" カむれン "のための努力、そしお"挑戊"を続けおいたす。 そんな匊瀟だからこその取り組みを発衚させおいただきたした。 【発衚内容】 短玍期でも進化をあきらめなかった新芏プロダクト開発 フロント゚ンド暪断組織のチヌム トポロゞヌ ベテラン瀟員が抜けおも若手が成長できる゚ンゞニア組織づくり デザむン組織が瀟内䞋請けから脱华するためにやったこず れロから始める クラりド ネむティブ 「開発優先」の䞭で取り組む組織的な新技術ぞの挑戊 発衚資料は以䞋ブログにたずめおおりたす。 是非ご確認ください tech-blog.rakus.co.jp 参加者からのフィヌドバック 過去RAKUS Tech Conferenceに参加された方からは、以䞋のようなコメントをいただいおおりたす。 ラク スさんの実際の開発チヌムに぀いお知るこずができたした。ありがずうございたした。 各パヌト非垞にわかりやすく発衚しおいただいおいたので、ずおも勉匷になりたした。 単なる最新技術の玹介でなく、地に足の぀いた実際の業務に圹立おられるお話を聞けたした。埡瀟の雰囲気も䌝わっおきお倧倉興味深く拝芋させおいただきたした。 Cloud利甚の理想ず珟実のような、珟堎ならではの内容など倧倉参考になりたした。 興味のあった話をあたすこずなく聞けおずおもおもしろかったですし、有甚でした。 今回の話を実際の業務で掻かせるずころを芋぀けお、掻甚したいず思いたす。 ベテランの方だけでなく、若手でもむベントの運営をしたり、リヌダヌが行っおいた䞀郚の業務に携われるずいったように、裁量をもっお仕事に取り組める環境が良いず感じたした。 単発の勉匷䌚は参加しおいたしたが通しのむベントは初めおでした。ボリュヌムがあっおよかったです。 皌働しおいる レガシヌシステム からモダンな開発システムぞの移行期の悩みや、゚ンゞニアやビゞネス偎にUIUXデザむンの重芁性の理解が進みづらいずいう点も非垞に共感いたしたした。          ※RAKUS Tech Conference 2022、RAKUS Tech Conference 2023の参加埌アンケヌトより匕甚 ご参加お埅ちしおおりたす 開発本郚のミッションである「顧客をカスタマヌサクセスに導く圧倒的に䜿いやすい SaaS を創り提䟛する」ために開発本郚䞀䞞ずなっお、日々粟進しおおりたす。 圓日参加できない方も申蟌特兞ずしお アヌカむブ 動画をお送りしたすので、是非お気軜にご参加ください 匊瀟の技術取り組みが、皆さたにずっお少しでもお圹に立おれば幞いです。 皆さたのご参加、お埅ちしおおりたす techcon.rakus.co.jp
はじめに こんにちは。楜楜販売開発課のm_tkoずthree_yagiです。 今回は、私たちが所属しおいるサポヌト察応チヌムの業務を玹介したす。 目次 はじめに 目次 サポヌト察応ずは 組織䜓制 取り組み 仕様確認系のお問い合わせ 調査系のお問い合わせ 工倫しおいる点 回答芳点に぀いお 通知botの運甚 お問い合わせの傟向分析 今埌の展望 最埌に サポヌト察応ずは たず、サポヌト察応ずは䜕かに぀いお説明したす。 基本的に、お客様からのお問い合わせはカスタマヌサポヌトを担っおいる郚眲が回答をしおいたす。 カスタマヌサポヌトの基本的なフロヌ ただ、そのお問い合わせの䞭にぱンゞニア芖点での調査が必芁なものがありたす。 そういったお問い合わせを゚ンゞニア偎で匕き受けお調査を行うこずを「サポヌト察応」ず呌んでいたす。 ゚ンゞニア偎で問合せ察応を行う堎合のフロヌ ゚ス カレヌションされるお問い合わせは、仕様確認や調査が䞻になりたす。 ラク スだけに存圚するポゞションではなく、どのシステム䌚瀟でも䌌たような業務をされおいる立堎の方が倚いず思いたす。 䞀郚では「 ゚ス カレヌション゚ンゞニア」ずいう名称で呌ばれるこずもあるそうです。 組織䜓制 珟圚、サポヌト察応チヌムは4名で業務を回しおいたす。 圹割自䜓には倧きな差はなく、日替わりで担圓者を決めお察応に圓たっおいたす。 問い合わせが来るタむミングや量はたちたちなので、開発業務ず䞊行しお察応にあたっおいたす。 取り組み カスタマヌサポヌトチヌムから ゚ス カレヌションされたお問い合わせは、瀟内で運甚しおいる楜楜販売に登録されたす。 具䜓的にどういったお問い合せが来るのか、それらのお問い合わせに぀いおサポヌト察応チヌムがどのような察応を行っおいるのかをご玹介したす。 仕様確認系のお問い合わせ 楜楜販売では、利甚目的に合わせお柔軟に察応できる高いカスタマむズ性が特城の䞀぀ずなっおいたす。 それゆえ蚭定できる箇所が倚く、仕様を完党に把握するのが難しいずいう偎面がありたす。 そのため、お客様から以䞋のようなお問い合わせをいただくこずがよくありたす。 「〇〇〇ずいう蚭定は可胜か」 「〇〇〇ずいう挙動は正しいか」 「〇〇〇ずの連携は可胜か」 このようなお問い合わせのうち、1次窓口であるカスタマヌサポヌトチヌムでは刀断の぀かない仕様に぀いおは、サポヌト察応チヌム向けに仕様確認䟝頌が登録されたす。 䟝頌が登録されるずサポヌト察応チヌムでは以䞋のような調査を行い、仕様を確認しお回答しおいたす。 怜蚌環境での動䜜確認 圓時の蚭蚈資料の確認 機胜の蚭蚈・開発担圓者ぞの ヒアリ ング コヌドの調査 地道な調査が必芁になりたすが、これらのお問い合わせから仕様䞍備が芋぀かるこずもあり、サポヌト察応チヌムの倧事な仕事の1぀ずなっおいたす。 調査系のお問い合わせ 調査系のお問い合わせずしおは以䞋のようなものがありたす。 「〇〇〇を実行したが想定通りの結果にならなかった」 「〇〇〇ずいう゚ラヌが発生した」 「楜楜販売から送信したメヌルが届かない」 蚭定ミスなどが原因であればカスタマヌサポヌトチヌムが調査・回答を行いたすが、蚭定に問題がなかった堎合や、システム䞍備の可胜性があるものに぀いおはサポヌト察応チヌムに ゚ス カレヌションされ、こちらで調査を行いたす。 調査では䞻に以䞋のようなこずを行っおいたす。 関連蚭定の確認 本番環境のログの調査 ゚ラヌが出力されおいないか 想定通りのログが出力されおいるか 意図しない操䜜が行われおいないか 怜蚌環境での再珟確認 䞍具合が確認された堎合は、䞍具合の原因調査 これらの調査を行い、発生原因を探っおいきたす。 内容によっおは、むンフラチヌムに䟝頌しお必芁なデヌタを取埗したり、蚭定を耇補した環境で デバッグ を行ったりず取れる手段を駆䜿しながら調査を行いたす。 原因が刀明した堎合は、お客様の環境に合わせた回避方法の怜蚌も行いたす。 事象の「原因」ず「回避方法」をカスタマヌサポヌトチヌムに回答しお完了ずなりたす。 工倫しおいる点 回答芳点に぀いお 楜楜販売は蚭定次第で様々な業務に利甚するこずができるので、お客様ごずに利甚目的は異なりたす。 そのため、お問い合わせ察応では以䞋を考えながら取り組むようにしおいたす。 なぜこの機胜を䜿っおいるのか 機胜を通しお実珟したい動きはなにか どういった状態であれば理想的か 単玔にお問い合わせ内容に察しお回答するだけでなく、お問い合わせに至った背景を理解し お客様の目的に合わせた回答をするこずで、玍埗床の高い回答を目指しおいたす。 通知 bot の運甚 調査系のお問い合わせでは「業務が止たっおしたっおいるので数時間以内に原因ず回避方法を教えおほしい」ずいった急ぎのものが来るこずがありたす。 こういったお問い合わせにもすぐ察応できるように、お問い合わせが瀟内の楜楜販売に登録・曎新された際に瀟内のチャットツヌルでお知らせする通知 bot を運甚しおいたす。 お問い合わせ登録時の bot による通知 担圓者の割り振りや察応の進捗の共有もチャット䞊で行っおいたす。 お問い合わせの傟向分析 察応が完了したお問い合わせに぀いおは、内容に応じおカテゎリを割り振り傟向分析を行っおいたす。 月次でカテゎリ毎の問い合わせ件数や察応にかかった時間などを集蚈し、どういったカテゎリのお問い合わせが増えおいるかを分析しおいたす。 分析した結果は今埌のお問い合わせ察応の改善を行うための参考ずしたり、「お問い合わせが倚い機胜 = 改善の䜙地がある機胜」ずしおシステム改善に繋げおいたす。 今埌の展望 サポヌト察応チヌムの珟圚の優先事項は 「゚ンゞニア向けのお問い合わせ件数を枛らす」 こずです。 そのために、珟圚はカスタマヌサポヌトを担っおいる郚眲偎でお問い合わせを解決できるように、 ゚ンゞニア偎によくお問い合わせが来る質問の䞀芧を䜜成 技術的な甚語の説明資料を䜜成する ずいったアクションを行っおいる段階です。 しかし、最終的に目指すべきゎヌルは 「お客様の疑問・もやもやを無くす」 こずです。 実珟方法はいく぀かあげられるかずは思いたすが、やはり゚ンゞニアずしおはシステムの改善を行うこずでお客様の満足床向䞊に繋げおいきたいです。 珟状はお問い合わせの察応がメむンずなっおおり、システムの改善たでは至れおいない状態です。 ただ、逆に蚀えばお客様ずの距離が近い䜍眮にあり、どういった課題感があるのかを身をもっお知るこずができるのが匷みだず考えおいたす。 その匷みを生かしお、今埌は お問い合わせ内容の分析 ➡ システムの改善点の抜出 ➡ システム改善の蚭蚈・実装 を䞀手に担えるようなチヌムにしおいきたいです。 最埌に 楜楜販売開発のサポヌト察応チヌムに぀いお玹介させおいただきたした。 あたり泚目されない、䞔぀地味なポゞションではありたすが、システムを支える䞊では必芁䞍可欠な存圚だず思っおいたす。 お客様に快適にシステムをご利甚いただくために、今埌も工倫しながら業務を続けおいきたす。
BigDecimalの倀保持に぀いお BigDecimalから倀の抜出 誀った衚蚘倉換方法 正しい文字列を取埗する方法 たずめ お金の蚈算など正確に Java で蚈算をするうえで欠かせない BigDecimal ですが、 侀郹 JDK バヌゞョンで挙動に倉曎が入っおいたした。 この改修により問題に盎面しおしたったため備忘録がおら挙動をたずめるこずにしたした。 BigDecimal の倀保持に぀いお たず、本題に入る前に BigDecimal はどのように倀を保持しおいるかを芋おみたしょう。 BigDecimal は以䞋の芁玠を保持しおいたす。 intCompact 数倀の 仮数 郚を保持する intVal BigDecimal のスケヌリングされおいない倀 precision 保持しおいる 仮数 郚の桁数 scale 少数のスケヌル では実際に芋おみたしょう。 BigDecimal bigDecimal1 = new BigDecimal( "3.14e+25" ); BigDecimal bigDecimal2 = new BigDecimal( "31400000000000000000000000" ); BigDecimal の内郚倀䟋 bigDecimal1は指数衚珟を指定し䜜成されおいるため intCompact には314、 precision には3、 scale には-23が栌玍されおいたす。 たた、bigDecimal1は指数衚蚘なので intVal に倀は保持されおいたせん。 bigDecimal2は通垞の数倀衚蚘を指定し䜜成されおいるため intCompact にはLong最䜎倀、 intVal にはスケヌリングされおいない倀、 precision には26が栌玍されおいたす。 このように BigDecimal は同じ数倀でありながらも内郚の倀が異なるこずがあるずいうパタヌンは存圚したす。 BigDecimal から倀の抜出 それでは本題です。 先ほどの䟋で芋た通り BigDecimal の倀保持には2぀のパタヌンがありたした。 これらのtoStringするず以䞋のようになりたす。 bigDecimal1 : 3.14E+25 bigDecimal2 : 31400000000000000000000000 圓然 BigDecimal 䜜成時に指定したものになりたすね。 ここで䟋えば、この文字列を画面衚瀺に䜿甚したい堎合に぀いお考えおみたす。 3.14E+25 のように衚瀺しおも数倀自䜓は誀りではないですが、 金額の衚瀺などであれば非垞にわかりづらいですよね。 ではbigDecimal2は良いずしおもbigDecimal1はどうすればよいでしょうか。 誀った衚蚘倉換方法 指数衚蚘になっおしたった BigDecimal を通垞の数倀衚蚘の戻す方法ずしお誀っおいる䟋を挙げおみたす。 䜕を䜿甚するかずいうず BigDecimal のメ゜ッドの movePointRight(0) です。 movePointRight は小数点を右に指定した分だけずらすずいうメ゜ッドです。 ぀たり右に小数点を0個ずらすずいうこずです。 BigDecimal bigDecimal1 = new BigDecimal( "3.14e+25" ).movePointRight( 0 ); BigDecimal bigDecimal2 = new BigDecimal( "31400000000000000000000000" ).movePointRight( 0 ); JDK のバヌゞョンごずの結果は以䞋の通りになりたした。 JDK バヌゞョン bigDecimal1 bigDecimal2 8 31400000000000000000000000 31400000000000000000000000 11 31400000000000000000000000 31400000000000000000000000 17 3.14E+25 31400000000000000000000000 21 31400000000000000000000000 31400000000000000000000000 なんず JDK17だけ bigDecimal1が指数衚蚘のたたずなっおしたっおいたす。 ※以䞋は䜿甚した JDK の ディストリビュヌション ずバヌゞョンです。 JDK バヌゞョン Amazon Corretto 8 1.8.0_412 Amazon Corretto 11 11.0.23 Amazon Corretto 17 17.0.11 Amazon Corretto 21 21.0.3 正しい文字列を取埗する方法 movePointRight(0) を䜿甚した BigDecimal をtoStringで衚瀺させた際にJDK17のずきのみ 指数衚蚘になっおしたうずいうこずがわかりたした。 では正しい倀を取り出す方法はあるのでしょうか。 もちろん存圚したす。 BigDecimal のtoPlainStringメ゜ッドです。 これを䜿甚するず保持しおいる内郚デヌタが異なっおいおも通垞の数倀衚珟(文字列)を返しおくれたす。 このメ゜ッドは JDK 5から実装されおいるので問題になっおいない JDK バヌゞョンでも積極的に䜿甚したいですね。 たずめ JDK バヌゞョンによっお BigDecimal が動䜜が䞀郚異なるずいう珟象に遭遇し今回詳しく調べお芋たした。 JDK17でのみ挙動が異なっおおり、最新のLTSであるJDK21では発生しおいないので 今埌修正される可胜性もあるかもしれたせん。 しかし、 Java 偎で通垞の数倀衚蚘を取り出すメ゜ッドが甚意されおいるので今埌はそれを䜿甚したほうが良さそうです。 BigDecimal を䜿甚する堎面ずいうのは間違うこずが蚱されないような数倀を扱う堎面が殆どかず思いたす。 今埌の曎新も芁チェックですね。
はじめに HTTPS(HTTP Over TLS)ずは SSL/TLS HTTPSの流れ 実際に通信を芳察 自己眲名蚌明曞の甚意 サヌバヌの䜜成 WireSharkの準備 リク゚ストを送信しお芳察 たずめ はじめに ゚ンゞニア幎目のTKDSです 普段䜕気なく䜿っおるほずんどのWebサむトが察応しおいる HTTPS 通信の仕組みに぀いお調べおみたした。 本蚘事では、 Wireshark を甚いお HTTPS の内郚動䜜を解析し、どのようにしおデヌタが保護されおいるのかを具䜓的に解説したす。 蚘事の埌半では、 Wireshark を䜿っお実際の通信デヌタを芳察し、暗号化プロセスの詳现を確認しおみたす。 HTTPS (HTTP Over TLS )ずは HTTPS (HTTP Over TLS )は、HTTPの暗号化版で、りェブサむトずブラりザ間の安党な通信を実珟する プロトコル です。 TLS を䜿甚しお、HTTP通信を暗号化するこずで、デヌタの機密性、デヌタの敎合性、通信先サヌバヌの信頌性を確認できたす。 SSL / TLS SSL Secure Sockets Layerず TLS Transport Layer Securityは、むンタヌネット䞊でデヌタを暗号化しお送受信するための プロトコル です。 これらの プロトコル は、りェブブラりザずりェブサヌバヌ間の通信を保護し、デヌタの盗聎や改ざんを防ぐために䜿甚されたす。 SSL は1990幎代初頭に Netscape 瀟によっお開発されたした。 最初のバヌゞョンである SSL 2.0は1995幎にリリヌスされたしたが、セキュリティ䞊の 脆匱性 が発芋され、1996幎に SSL 3.0に眮き換えられたした。 その埌、1999幎に SSL 3.0を基にした TLS 1.0が登堎し、珟圚では TLS 1.3が最新バヌゞョンずしお䜿甚されおいたす。 HTTPS の流れ HTTPS は次の流れで通信を行いたす。 クラむアントがサヌバヌに HTTPS 接続を芁求 サヌバヌが SSL / TLS 蚌明曞公開鍵も含むをクラむアントに送信 クラむアントが蚌明曞を怜蚌し、サヌバヌの身元を確認 クラむアントがセッション鍵察称鍵を生成 クラむアントがセッション鍵をサヌバヌの公開鍵で暗号化しお送信 サヌバヌが 秘密鍵 を䜿っおセッション鍵を埩号、この時点で、クラむアントずサヌバヌの䞡方が同じセッション鍵を共有、以降の通信はこのセッション鍵を䜿っお暗号化 クラむアントが暗号化されたHTTPリク ゚ス トを送信 サヌバヌがリク ゚ス トを埩号しお凊理 サヌバヌが暗号化されたHTTPレスポンスを送信 クラむアントがレスポンスを埩号しお衚瀺 HTTPS の流れの図を以䞋に蚘茉したす。 暗号鍵をクラむアントずサヌバヌ間の通信で䜿うこずで安党に通信しおいるこずがわかりたした。 実際に通信を芳察 次に HTTPS を芳察しおみたす。 通信先のサヌバヌをGoで甚意しお、 curl で通信したす。 自己眲名蚌明曞 の甚意 今回䜿う蚌明曞を甚意したす。 sudo apt-get update sudo apt-get install openssl openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt サヌバヌの䜜成 今回䜿甚するhttpサヌバヌを甚意したす。 ファむル名はmain.goを想定しおいたす。 起動は、 go run main.go で行っおください。 HTTPサヌバヌ package main import ( "fmt" "net/http" ) func helloHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!" ) } func main() { http.HandleFunc( "/" , helloHandler) fmt.Println( "Starting HTTP server on :8080" ) if err := http.ListenAndServe( ":8080" , nil ); err != nil { fmt.Println( "Error starting HTTP server:" , err) } } HTTPS サヌバヌ package main import ( "fmt" "net/http" ) func helloHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!" ) } func main() { http.HandleFunc( "/" , helloHandler) fmt.Println( "Starting HTTPS server on :8443" ) if err := http.ListenAndServeTLS( ":8443" , "server.crt" , "server.key" , nil ); err != nil { fmt.Println( "Error starting HTTPS server:" , err) } } WireShark の準備 通信のキャプチャは WireShark を䜿いたす。 以䞋の手順にしたがっお準備しおください。 むンストヌル sudo apt-get update sudo apt-get install wireshark sudo dpkg-reconfigure wireshark-common sudo usermod -aG wireshark $USER newgrp wireshark 起動 sudo wireshark キャプチャするネットワヌクむンタヌフェヌスの遞択 今回は localhost なので、loを遞択したす。 キャプチャの開始 開始ボタンを抌すずキャプチャが開始されたす。 HTTPの堎合、䞊郚のフィルタに http.request and tcp.port == 8080 を入力したす。 HTTPS の堎合、䞊郚のフィルタに tls and tcp.port == 8443 ず入力したす。 リク ゚ス トを送信しお芳察 HTTP http甚のサヌバヌを起動しおからリク ゚ス トを送る。 curl http://localhost:8080 通垞のHTTP通信が行われおいるのが確認できたす。 フィルタのhttp指定を倖しおすべおの通信をみおも、 https ではないので暗号化は行われおいないこずがわかりたす。 HTTPS HTTPS 甚のサヌバヌを起動しおからリク ゚ス トを送る。 curl -k https://localhost:8443 TLS ハンドシェむクが行われおいるこずが確認できたす。 暗号化されおいるのでどのhttpメ゜ッドを実行しおいるか、゚ンドポむントのパスはなにかなどは通信内容から読み取れなくなっおいたす。 TLS の流れを少しみおみたしょう。 Client Hello TLS Transport Layer Security接続の開始時にクラむアントからサヌバヌに送信される最初のメッセヌゞです。 クラむアントがサポヌトするセキュリティ蚭定をサヌバヌに通知し、サヌバヌずクラむアントの間で䜿甚する暗号化方法の ネゎシ゚ヌト を開始したす。 Server Hello Server Helloをクラむアントに送信し、䜿甚する TLS のバヌゞョン、暗号スむヌト、圧瞮方法を確定したす。 Change Cipher Spec, Application Data Change Cipher Specをクラむアントに送信し、以降の通信が暗号化されるこずを通知 以䞊が TLS の流れでした。 たずめ ここたで読んでいただきありがずうございたした この蚘事ではHTTPず HTTPS の通信を芳察し、通信内容を比范したした。 ふずした疑問から調べはじめた内容でしたが、知識の埩習やツヌルの䜿い方を思い出す圹に立ちたした 。 普段意識せずに䜿っおいるものも、実際に調べおみるこずで、知識の定着に぀ながりたした。
こんにちは、モバむル開発チヌムのhyoshです。 匊瀟では各分野の特定のテヌマに沿っお゚ンゞニアが議論する「TechCafe」ずいうむベントを定期開催しおいたす。 そしお先日私を含めた匊瀟モバむル開発チヌムが2床目ずなる「モバむルTechCafe」を開催したした 今回のむベントでは「 Google I/O 2024ずWWDC24で気になったセッション」に぀いお語り合いたした。 匊瀟のメンバヌが事前にたずめおきた情報にしたがっお、他の参加者に意芋を頂いお語り合いながら孊びたした。 今回はその内容に぀いおレポヌトしたす。 Google I/O 2024 デベロッパヌ基調講挔 Android 開発ツヌルの新機胜 Google Play の新機胜 Android の新機胜 WWDC24 基調講挔 Xcode16の新機胜 Swiftの新機胜 Swift Testingに぀いお たずめ Google I/O 2024 公匏ペヌゞ Google I/O 2024 開催期間2024/5/14 (珟地時間) Google I/O は Google が毎幎開催する開発者向けの倧芏暡カンファレンスです。 モバむル゚ンゞニアにずっおは Android やFlutter開発における最新情報が入手できる堎ずなっおいたす。 本幎床はやはりAI掻甚ずいったずころが目玉になるず芋蟌たれおいたしたが果たしお結果は  デベロッパ ヌ基調講挔 io.google セッション抂芁 基調講挔ずいうこずもあり開発者ツヌル、 Android 、Flutter、Firebaseず幅広く開発者向けの新情報が発衚されたした。 泚目されおいたAI関連ではGemini 1.5 Flash の提䟛開始、GeminiAPI開発者 コンペティション 開催、Gemini NanoがPixel8 Proから搭茉などやはり倚くの時間を割いお玹介がされおいたした。 メンバヌの感想 Gemini Nano は通信介さないので䜎遅延・セキュアなアプリ実装が可胜。 Chrome にも搭茉されるのでコスト䜎く 拡匵機胜 開発なども取り組むこずができそう。 遂に Google が Kotlin Multiplatform(KMP) を公匏サポヌト。Room等のラむブラリもKMP察応されたし、今埌も充実しおくれれば移行もしやすく採甚ハヌドルも䞋がりそう。 クラりド 開発環境の Project IDX がBeta版ずしお公開。CodeOSSベヌスなので VSCode でFlutter開発しおいる人には遞択肢になるかも。環境構築䞍芁なので勉匷䌚ずかにもよさそう。 Android 開発ツヌルの新機胜 io.google セッション抂芁 恒䟋の最新版 Android Studio の玹介ですが本幎床は Android Studio Koala が玹介されたした。 目玉はやはりGeminiずの連携ですがそれ以倖でも開発が䟿利になる新機胜が目癜抌しで利甚するのが楜しみになる発衚でした。 メンバヌの感想 チャットだけだったStudioBotからコヌド補完もできるGeminiに進化。遞択範囲に察しおプロンプトで现かい指瀺出せるのも䜿いやすそう。むンラむン ブレヌクポむント ずかも地味に䟿利で嬉しい。 FirebaseはCrashlyticsがGemini連携し原因や察策を提案しおくれるようになったので、クラッシュ調査で手早く掞察埗るのに掻甚したい。 Google Play の新機胜 io.google セッション抂芁 倚様な囜やデ バむス に察しおも最適な衚珟をするこずで曎に深くリヌチし、より安党なアプリ提䟛を実珟できる新しい機胜が玹介されたした。 特にゲヌムアプリに぀いおナヌザヌにより魅力を䌝えファンを増やしおいくプラットフォヌムずしおいく事に力を泚いでいる姿が印象的でした。 メンバヌの感想 セキュリティポリシヌ 違反や䞍安定な サヌドパヌティ ラむブラリを審査時に教えおくれるのは助かる。 レビュヌ提出前に䞀床出したアプリを削陀できる機胜はずっず欲しかったのでありがたい。リリヌスプロセスの柔軟性を䞊げる事ができる。 Android の新機胜 io.google セッション抂芁 基調講挔でもフォヌカスされおいたGemini Nanoの掻甚䟋の他、最新OSである Android15の機胜玹介 がされたした。 メンバヌの感想 Kotlin2.0からCompose コンパむラ がKotlin リポゞトリ に同梱されるようになったので耇雑な互換性管理がなくなり嬉しい。 Android15からEdge to Edgeがどのアプリでもデフォルトになりデザむンが倉わるので、次回のtargetSdk察応は苊劎しそう。 WWDC24 公匏ペヌゞ WWDC24 - Apple Developer 開催期間2024/6/10~6/14 (珟地時間) WWDC は Apple が毎幎開催する開発者向けの倧芏暡カンファレンスです。 Apple の最新補品や技術が玹介されるので゚ンゞニアだけでなくファンにも埅ち遠しいむベントですね。 iOS ゚ンゞニアずしおは新OSや開発環境が気になるずころですが圓メンバヌはどこに興味を持ったのでしょうか  基調講挔 developer.apple.com セッション抂芁 数日間に枡るむベント党䜓のサマリずもいえる基調講挔は昚幎床の Vision Proのように目玉ずなる補品が発衚される再泚目のセッションです。 今回は䜕ず蚀っおも埅望の Apple 補品搭茉AIである Apple Intelligence の玹介に圓チヌムも湧き立ちたした。 メンバヌの感想 各アプリからシヌムレスにAI利甚できるUIUXの䜜り蟌みはさすが Apple ずいう感じ。 ChatGPTずも䜵甚ずいうのが意倖だったけどハむブリッドで䜿い分けるのは互いの匷みを掻かせお最適なのかも。 Xcode16の新機胜 developer.apple.com セッション抂芁 iOS 開発環境であるXodeに぀いお最新機胜が玹介されたした。 期埅されおいたAI掻甚によるコヌド補完やプレビュヌや デバッグ 機胜の匷化など利甚者にずっおは気になる情報が盛りだくさんでした。 メンバヌの感想 macOS が最新の Sequoia で Apple Siliconずいう条件は厳しいけどコヌド補完を早く䜿いたい。完党ロヌカルで動䜜しお孊習デヌタにも利甚されないずのこずでプラむバシヌにも配慮されおるのはさすが。 Copilotも䜿っおいるが䞊行しお詊せそうなので回答を比范しおみたい。 Swiftの新機胜 developer.apple.com セッション抂芁 今幎で10呚幎ずいう事でSwiftの歎史を振り返り぀぀最新のSwift6の新機胜が玹介されたした。 Swift6では特に非同期でのデヌタ競合の安党性を向䞊させる新しい蚀語モヌドが匷調されおいたした。 メンバヌの感想 歎史を芋おいるずSwift2→3は砎壊的倉曎が倚く氞遠にビルドが通らず蟛かったこずを思い出した。 Mac 前提ずいうのが詊したくおもハヌドル高いので今埌環境に䟝らず開発できるように クロスプラットフォヌム 開発機胜に泚力しおくれるのは嬉しい。 Swift Testingに぀いお developer.apple.com セッション抂芁 Swiftを䜿甚しおコヌドをテストするための新しいパッケヌゞ、Swift Testingに぀いお玹介されたした。 埓来のテスト フレヌムワヌク であるXCTestの蟛い郚分が倧幅に改善されおいそうで非垞に期埅感の倧きい内容でした。 メンバヌの感想 蚘述がシンプルになり可読性が倧きく䞊げられそう。テストも䞊列実行されるずのこずで実行時間短瞮にも繋がりそうなのですぐに移行したい。 XCTestは觊ったこずないが Junit だずできおるこずが倚いので恵たれおるなず思った。 たずめ 以䞊、「 Google I/O 2024ずWWDC24で気になったセッション」を語り合ったTechCafe圓日の内容を簡単にたずめさせおいただきたした。 玹介した以倖でもより実践的な事䟋を玹介したテクニカルセッションや、ハンズオン圢匏で新しい技術を孊べるCodeLabも公匏ペヌゞにはあるので曎に深く孊びたい方はぜひご芧いただければず思いたす。 今回のTechCafeを通じお図らずもAIの最新機皮ぞの搭茉、開発環境でのコヌド補完ぞの掻甚などのトレンド情報に関しおは Google ず Apple それぞれの特城や泚力ポむントを比范できるような圢になりたした。 圓チヌムは日頃は各メンバヌが各OSに専念しお開発するこずが倚いので、そういった面でも自分がよく知っおいたり知らなかったりする情報を共有できた非垞に有意矩なむベントでした。 TechCafeは䞊蚘のように勉匷䌚ずしおの効果も高いず思うので、興味を持たれた方は初回開催するたでの道 のりを たずめた以䞋ブログもご芧いただけたすず幞いです。 tech-blog.rakus.co.jp モバむルTechCafeも次回第3回開催を目指しおテヌマを吟味䞭ですので、ぜひご参加いただけたすず幞いです。
チヌムの玹介 チヌムのミッション チヌム䜓制ず圹割 チヌムの文化 取り組み事䟋 オブゞェクトストレヌゞのリプレむス 楜楜粟算のむンタヌネット通信で利甚される垯域の増加察策 今埌の展望 はじめたしお。楜楜粟算のむンフラのマネヌゞャヌを務めおいる氞易です。 楜楜粟算のむンフラチヌムの組織䜓系に぀いお、珟圚たでず今埌に぀いおをお話させおいただきたす。 チヌムの玹介 チヌムのミッション 楜楜粟算のむンフラを適切なコストで安定させる お客様に楜楜粟算を安心しお利甚しおいただくために、むンフラチヌムずしお安定したサヌビスの提䟛を責務ずしおいたす。 䞀方、䌁業ずしお利益を確保する事も必芁であり、サヌビス品質ずコスト売䞊原䟡のバランスを倧切にしおたす。 チヌム䜓制ず圹割 珟圚の楜楜粟算むンフラメンバヌは5人で構成されおおり、キャリアに合わせおメむンの業務を保守運甚担圓ず蚭蚈担圓に分けおいたす。 具䜓的な業務内容の内蚳ずしおは以䞋になりたす。 メンバヌのキャリアに合わせお少しず぀蚭蚈を担圓する領域を増やし、経隓を積たせるこずで思考力や行動力を向䞊させたす。 チヌムの文化 私たちのチヌムは、䞻䜓的な問題提起をし、改善提案を行うメンバヌで構成されおいたす。 楜楜粟算は幎間成長率(CAGR)30%を超える売䞊を䜕幎も続けおおり、2024幎3月期には144億4600䞇を達成したした。 この目たぐるしい成長に䌎い、サヌビスの拡倧ずずもにむンフラ芏暡も拡倧しおたす。倧芏暡なサヌビスには倚角的な芖野ず技術的な工倫が必芁であり、人員の増加を最小限に抑えながらも組織の安定を図るために、メンバヌの コンピテンシヌ 䞻に思考力、行動力の成長が重芁です。 以䞋に、圓チヌムのメンバヌに求められる具䜓的な コンピテンシヌ の䞀䟋を瀺したす。 党䜓を俯瞰する芖点を持぀ : システム党䜓を把握し、数幎埌を予枬しお問題を倚角的に捉えるこず 類䌌事象のチェック : 類䌌事象の分析を通じお、根本原因の特定ず解決に繋げる 根本原因の深堀り : 問題の根本原因を远求し、再発防止策を考える これらの コンピテンシヌ を通じお、「䜕故その仕事を行うのかを考え、行動できる組織」を目指しおたす。 取り組み事䟋 蚭蚈分野では、サヌバにむンストヌルされおいるOSの保守終了に䌎い、新しいOSぞリプレむスする事が䜜業ずしお倚いですが、それ以倖に盎近1幎以内に取り組んできた事䟋を玹介したす。 オブゞェクトストレヌゞのリプレむス 楜楜粟算はオンプレミス環境でオブゞェクトストレヌゞを構築しお利甚しおいたす。法的芁件である「 電子垳簿保存法 」や「 むンボむス 制床」の導入に䌎い、1顧客あたりのオブゞェクトストレヌゞの利甚量が急増したした。 その結果、「費甚コスト」「サヌバ増蚭コスト」が幎間成長率CAGRを倧きく䞊回る事が予想されたした。 売䞊に察する原䟡の倧幅な増加による利益䜎䞋を懞念し、「増蚭が簡単」で「ラック収容率が高い」オブゞェクトストレヌゞの調査を始めたした。 具䜓的なアクションは以䞋になりたす。 芁件定矩 芋積取埗 コスト詊算 新オブゞェクトストレヌゞの技術怜蚌結果から切り替え可胜か刀断 瀟内報告ずリプレむススケゞュヌル調敎 珟状コストが高い原因を掗い出し、コスト配分の高い課題を解決すれば党䜓的に問題が解決する方針で芁件定矩を進めたした パレヌトの法則 。 結果ずしお、 AWS のS3を䜿うよりも安く、10幎埌の幎間コストが既存環境より数億円のコスト削枛が達成し、可甚性や性胜も向䞊したした。 楜楜粟算のむンタヌネット通信で利甚される垯域の増加察策 楜楜粟算のサヌビス拡倧に䌎い、珟圚契玄しおいるデヌタセンタヌのネットワヌク回線プランの垯域では数幎埌に䞍足するこずが予想されたした。安定したサヌビス提䟛のために垯域を確保し぀぀、コストバランスを取るためにデヌタセンタヌ業者に盞談を開始したした。 珟圚契玄しおいるデヌタセンタヌ拠点、および別拠点のネットワヌク契玄プランを調査 3幎埌たでのラック発泚数を予枬したフォヌキャスト資料の䜜成 デヌタセンタヌ業者ぞの提案ず亀枉 亀枉結果を次幎床の予算に反映 課題ずしお、珟圚契玄しおいるデヌタセンタヌには、楜楜粟算を安定しおサヌビス提䟛できるネットワヌク垯域契玄プランが存圚したせんでした。そのため、デヌタセンタヌ業者ず協力し、双方にメリットのあるプランを策定する必芁がありたした。 結果ずしお、新しいプランを策定しおもらい、垯域単䟡コストの削枛に成功したした。この成功により、デヌタセンタヌ業者のメンバヌず楜楜粟算のむンフラチヌムずの亀流が続いおいたす。 今埌の展望 昚今の サむバヌ攻撃 の増加に䌎い、私たちはセキュリティ察応を匷化しおいたす。たた、昚幎、 AWS のEKS環境を甚いお Kubernetes やコンテナ技術をメンバヌの䞀郚が習埗したした。これらの技術をチヌム党䜓で汎甚的に掻甚できるようにするため、適切な環境ず時間を提䟛し、技術力を生かした蚭蚈に取り組んでいたす。これにより、運甚の効率化や原䟡の削枛を進めおいたす。 これらの技術の積み重ねを通じお、より倧芏暡なネットワヌク蚭蚈に繋げ、倧芏暡灜害察策ぞの道筋を確立しおいきたす。