TECH PLAY

株匏䌚瀟ラクス

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

å…š953ä»¶

はじめに 今回は10/28開催の ラク スMeetup 『 SaaS プロダクトのフロント゚ンドVue.js、React、TypeScript、E2Eテスト』 の様子をお届けしたす ラク スがこれたで開催しおたいりたしたむベントの䞭でも最倚の申し蟌みをいただき、 ラク ス゚ンゞニア3名が日々のフロント゚ンド技術の取り組みを堂々ず発衚させおいただきたした。 はじめに むベントテヌマ抂芁 発衚の玹介 テスト皌働の削枛ずフロント゚ンドの品質担保を行うE2Eテスト Vue.js + TypeScriptによる新芏サヌビス開発ふりかえり 息の長いサヌビスのフロント゚ンドを少しず぀改善しおいく営み おわりに むベントテヌマ抂芁 今回のMeetupでは ラク スが展開する新旧3皮類のサヌビスから、各サヌビスにおけるフロント゚ンドに関する取り組みを発信させおいただきたした。 10月にリリヌスしたばかりの 楜楜勀怠 、急速に利甚者が拡倧する チャットディヌラヌ 、すでに数倚くの利甚者を抱える歎史ある 楜楜明现 より、それぞれ開発をリヌドする゚ンゞニア達が登壇させおいただきたした。 それぞれの局面を迎える3サヌビスでフロント゚ンド技術をどのように掻甚しながらサヌビスを成長させおいるか、たたモダンなフロント゚ンド技術をどのように倧芏暡 SaaS に取り入れおいくかをメむンテヌマずした登壇ずなりたした。 発衚の玹介 それではここから各発衚内容ず資料を共有させおいただきたす テスト皌働の削枛ずフロント゚ンドの品質担保を行うE2Eテスト たずはチャットディヌラヌのフロント゚ンド開発ずバック゚ンド開発で暪断的に掻躍する川又が、フロント゚ンドの効率的な品質担保策ずしお導入したE2Eテストを玹介させおいただきたした。 そのサヌビスの特性䞊、倧前提ずなる自動応答凊理ナヌザから質問に察し、想定した回答を返すを担保するのが非垞に重芁なチャットディヌラヌ。 か぀おは倚倧なる 工数 によっおテストを行い、その品質を担保しおいたした。 今回ご玹介したしたのはそんな状況を回避すべく、Puppeteerを䞭心ずしたE2Eテストです。 同じ悩みに盎面しおいる方には、川又の発衚から解決のヒントを掎んでいただければず思いたす。 speakerdeck.com Vue.js + TypeScriptによる新芏サヌビス開発ふりかえり 10月にリリヌスされたばかりの ラク ス最新のサヌビスである楜楜勀怠に぀いお、リリヌスに至るたでの玄1幎間の振り返りを共有させおいただきたした。 ラク ス初のフロント゚ンド・バック゚ンド分離の䜓制、たたVue.jsずTypeScriptを䞭心ずしたモダンなフロント゚ンド技術での開発、この2぀の偎面から良かった点・苊しんだ点が詳现に玹介されおいたす。 ラク ス初のフロント゚ンド゚ンゞニアであり、フロント゚ンド組織の拡倧にも埓事する北嶋がこれらの孊びを今埌どう掻かし、 ラク スのサヌビスの発展に挑戊しおいくか泚目です。 speakerdeck.com 息の長いサヌビスのフロント゚ンドを少しず぀改善しおいく営み 最埌に楜楜明现のリヌド゚ンゞニアずしお䞭心的に掻躍する䞉田より、2010幎リリヌスのサヌビスのフロント゚ンドを改善しおいく取り組みを玹介させおいただきたした。 リリヌスからこれたでの10幎以䞊に、今埌10幎もより加速床的に利甚者が拡倧するこずを芋蟌み、楜楜明现では珟状の問題点を分析しながらフロント゚ンドの改善に取り組んでいたす。 モダンな技術の導入には技術・組織・人などの課題をクリアしおいく必芁がありたすが、ここたでの改善に至る地道な取り組みが玹介されおいたす。 ご参加の方の䞭には、 ラク スが組織的に取り組む技術ロヌドマップに぀いお関心を持っおいただけた方もいらっしゃったようです。 ぜひずも倚くの゚ンゞニアの方のご参考ずしおいただきたい内容です。 speakerdeck.com おわりに ラク スによるフロント゚ンドの取り組み、参考にしおいただける知芋はありたしたでしょうか 倚くの方に支持いただける倧芏暡 SaaS が故の制玄ず闘い぀぀、それでも技術の進化を止めない ラク スの戊略を感じ取っおいただけたのではないかず思いたす。 今埌も ラク スMeetupでは日々の゚ンゞニアの取り組みを発信しおたいりたすので、次回もぜひご参加いただけたすず幞いです。 そしお盎近ですが、フロント゚ンドがテヌマのむベントが予定されおいたす 前回の実斜の際にも倚くの方にご参加いただけ、盛況なむベントずなりたした。 今回も面癜く有益な堎ずなりたすので、是非ご参加いただけたすず幞いです rakus.connpass.com
こんにちは。株匏䌚瀟 ラク スで先行技術怜蚌を行っおいる技術掚進課のt_okkanです。 珟圚、フロント゚ンドの技術怜蚌をしおいるのですが、手頃にバック゚ンドの API を構築したいず思い JSON Serverを利甚したした。 同じようにバック゚ンドを手軜に構築する手段ずしおは、FirebaseなどのBaaSを利甚するこずがあげられたすが、より手軜にロヌカルで構築できる手法を玹介しようず思いたす。 さらに今回はDockerでの JSON Serverの構築ず、デフォルトの JSON Serverの機胜を拡匵し認蚌機胜を远加する方法を玹介しようず思いたす。 JSON Server JSON Serverの実装 フォルダヌ構成 API仕様 data.json JSON Serverの実装 Docker環境 実行 たずめ JSON Server JSON Serverは、フロント゚ンド開発者向けプロトタむピング時のバック゚ンド API のモック䜜成ラむブラリです。ロヌカルに甚意した JSON ファむルをリ゜ヌスずしお API を構築するこずができ、その JSON ファむルの構成から自動的にURLが生成されたす。 www.npmjs.com Expressベヌスでサヌバヌを構築しおいるので、Expressのモゞュヌルを䜿甚しおカスタマむズを実装できたす。 今回はその仕組みを利甚しお、認蚌機胜付きの JSON Serverを構築したす。 タむトルの 30秒で構築できる はコヌドがあれば、30秒で構築できるずいうこずです。 デフォルトの認蚌なしの機胜なら、 Getting started 通りに構築するずコヌドレスで、30秒で REST API を構築できたす。 公匏ドキュメント でもアピヌルしおいたす。 Get a full fake REST API with zero coding in less than 30 seconds (seriously) JSON Serverの実装 フォルダヌ構成 今回構築する API サヌバヌのフォルダヌ構成は以䞋のようになりたす。 ./server フォルダヌ内にDockerコンテナぞ配眮する、 JSON Server甚のファむル矀を配眮したす。 ./ |- server | |- data | | |- data.json | |- server.js | |- package.json |- docker-compose.yml |- Dockerfile server.js にはExpressのモゞュヌルを利甚しおデフォルトの Json Serverをカスタマむズした機胜を実装したす。今回は認蚌凊理を実装したす。 data.json には API で管理するリ゜ヌスデヌタを蚘述したす。 API 仕様 今回構築する API サヌバヌの䞻な仕様です。このほかにも PUT や DELETE も䜿甚できたす。 今回はブログ蚘事の API を想定しおいたす。ログむン・ブログ蚘事取埗、の API にのみ認蚌なしアクセスでき、それ以倖の API にアクセスするには認蚌が必芁ずなりたす。 URL メ゜ッド 機胜 認蚌 http://localhost:33000/blogs GET ブログ䞀芧取埗 なし http://localhost:33000/blogs POST ブログ蚘事远加 あり http://localhost:33000/blogs/:id GET ブログ取埗 なし http://localhost:33000/users GET ナヌザヌ䞀芧取埗 あり http://localhost:33000/users/:id GET ナヌザヌ䞀芧取埗 あり http://localhost:33000/auth/login POST ログむン なし data. json data.json はデヌタベヌスのように、 API で扱うデヌタを保存したす。今回は、ナヌザヌ情報ずブログ情報を保存するようにしたす。 { " blogs ": [ { " id ": 1 , " title ": " Java ", " body ": " Java Beans ", " post ": " 2020/10/01 ", " userid ": 1 } , { " id ": 2 , " title ": " Python ", " body ": " Python3.10 ", " post ": " 2020/10/04 ", " userid ": 1 } , { " id ": 3 , " title ": " JavaScript ", " body ": " Vue.js ", " post ": " 2020/10/10 ", " userid ": 2 } ] , " users ": [ { " id ": 1 , " name ": " user one ", " email ": " one@example.com ", " password ": " userone " } , { " id ": 2 , " name ": " user two ", " email ": " two@example.com ", " password ": " usertwo " } ] } JSON Serverの実装 ではプログラムを実装し、 JSON Serverを拡匵し認蚌付き REST API サヌバヌを構築しおいきたす。 たずはNode.jsのプロゞェクトの package.json を以䞋のように蚭定したす。 { " name ": " json-server-docker ", " version ": " 1.0.0 ", " description ": " Json Server on Docker ", " author ": " XXXX@example.com ", " main ": " server.js ", " scripts ": { " start ": " node server.js " } , " dependencies ": { " body-parser ": " ^1.19.0 ", " helmet ": " ^4.1.1 ", " json-server ": " ^0.16.1 ", " jsonwebtoken ": " ^8.5.1 " } } main , scripts , dependencies 以倖は奜みの倀に蚭定しおください。 今回は認蚌にJWTでの トヌク ン認蚌を䜿甚するので、 jsonwebtoken を䟝存関係に远加したす。 では次に、サヌバヌ本䜓ずなる server.js を以䞋のように実装したす const jsonServer = require( "json-server" ); const fs = require( "fs" ); const bodyParser = require( "body-parser" ); const jwt = require( "jsonwebtoken" ); const helmet = require( "helmet" ); // JSON Serverで䜿甚するJSONファむルを蚭定 const server = jsonServer.create(); const router = jsonServer.router( "./data/data.json" ); // JSON圢匏のリク゚スト察応 server.use(bodyParser.urlencoded( { extended: true } )); server.use(bodyParser.json()); // 眲名 const JWT_SECRET = "jwt_json_server" ; // 有効時間 const EXPIRATION = "1h" ; // デヌタヌベヌスの䜜成 const db = JSON.parse(fs.readFileSync( "./data/data.json" , "UTF-8" )); // ①ログむン甚のルヌト server.post( "/auth/login" , (req, resp) => { const { email, password } = req.body; // ログむン怜蚌 if ( db.users.findIndex( (user) => user.email === email && user.password === password ) === -1 ) { resp. status (401).json( "Unauthorized" ); return ; } // ログむン埌、アクセストヌクンの生成 const access_token = jwt.sign( { email, password } , JWT_SECRET, { expiresIn: EXPIRATION, } ); resp. status (200).json( { access_token } ); } ); // ②ログむン認蚌が必芁ないルヌト // 蚘事䞀芧を取埗 server.get( "/blogs" , (req, resp) => { const blogs = db.blogs; resp. status (200).json( { blogs } ); } ); // 蚘事IDから蚘事を取埗 server.get( "/blog/:id" , (req, resp) => { const id = req.params.id; const blog = db.blogs.find((blog) => blog.id === Number (id)); resp. status (200).json( { blog } ); } ); //③ 認蚌が必芁なルヌト server.use((req, resp, next) => { // 認蚌圢匏チェック if ( req.headers.authorization === undefined || req.headers.authorization.split( " " ) [ 0 ] !== "Bearer" ) { // 認蚌圢匏が異なる堎合 resp. status (401).json( "Unauthorized" ); return ; } // 認蚌チェック try { var decode = jwt.verify( req.headers.authorization.split( " " ) [ 1 ] , JWT_SECRET ); // 認蚌に成功した堎合は、next関数を実行しJSON Serverの機胜を利甚する next(); } catch (e) { // 認蚌に倱敗した堎合 resp. status (401).json( "Unauthorized" ); } } ); // JSON Serverを起動する server.use(router); server.use(helmet); server.listen(33000, () => { console.log( "JSON Server Start" ); } ); JsonServer Access Control を参考に実装したした。 実装した ルヌタヌ ずしおは、 ログむン甚 /auth/login  認蚌なしで公開 /blogs 、 /blogs/:id  䞊蚘以倖で認蚌が必芁 の3皮類を実装しおいたす。 jsonwebtoken や、 body-parser の䜿い方はこちらを参考にしおいたす。 jsonwebtoken - npm body-parser - npm Docker環境 Dockerを甚いお JSON Serverを構築したす。 Dockerfile ず docker-compose.yml は以䞋のようにしたした。 Dockerfile FROM node:latest RUN yarn add global json-server docker-compose.yml version: "3" services: json-server: build: context: . dockerfile: Dockerfile volumes: - ./server:/data/server:delegated tty: true working_dir: /data/server command: sh -c "yarn install && yarn start" container_name: jsonserver-docker ports: - "33000:33000" 実行 では最埌にDockerコンテナ䞊で実行したしょう。 $ docker-compose build $ docker-compose up -d 起動埌に curl で http://localhost:33000/users にアクセスしおください。認蚌をしおいないので、 Unauthorized が返っおきたす。 $ curl http://localhost:33000/users "Unauthorized" /auth/login でログむンしおから、レスポンスのアクセス トヌク ンをヘッダヌに付䞎しお同じURLにアクセスしおみたす。 $ curl -X POST -H "Content-Type: application/json" -d '{"email": "one@example.com", "passowrd": "userone"}' http://localhost:33000/auth/login { "access_token": "アクセストヌクン" } $ curl -H "Content-Type:application/json" -H "Authorization:Bearer アクセストヌクン" http://localhost:33000/users [ { "id": 1, "name": "user one", "email": "one@example.com", "password": "userone" }, { "id": 2, "name": "user two", "email": "two@example.com", "password": "usertwo" } ] レスポンスから分かるように、ナヌザヌ䞀芧を取埗できたす。 /blogs のGETメ゜ッドずPOSTメ゜ッドでも詊しおみおください。 たずめ JSON Serverを利甚しお認蚌機胜付きのモック REST API を構築したした。 䞀床䜜成しおしたえば、Dockerを起動するだけでい぀でも30秒でバック゚ンドの API を構築できたす。 日々の勉匷や、ちょっずした怜蚌などに利甚しおみおください。 GitHub にもコヌドを䞊げおいたす。参考にしおみおください。 https://github.com/txkxyx/jsonserver-docker github.com ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに こんにちは、itoken1013です 定期的に発信しおいたす入門シリヌズ、今回のテヌマは Emacs の䜿い方 です 昔から倚くの人から熱い支持がある゚ディタである Emacs ですが、䜿い方をマスタヌするずずおも䟿利に玠早くコヌディングが可胜ずなりたす。 今回の蚘事を読んでいただき、ぜひ䜿い方を身に぀けおいただければず思いたす はじめに むンストヌル手順Windows むンストヌラを入手する むンストヌルを実斜する むンストヌル手順Mac 前提知識 コマンドの衚蚘 C-x M-x Return バッファ りィンドり ミニバッファ 基本的なコマンド Emacsを起動する ファむルを新芏䜜成する 移動する䞊䞋巊右 文字を削陀する Undo倉曎の取り消し ファむルを保存する ファむルを閉じる ファむルを開く 䞊曞き保存 Emacsを終了する 困った時の䞭断コマンド その他のコマンド䞀芧 終わりに むンストヌル手順 Windows  䜿い方の前に、たずはWindow向けの Emacs のむンストヌル手順からです。 Catalina以前の Mac もしくは Linux を利甚の方は Emacs はむンストヌル枈ですので、デフォルトの状態で Emacs を利甚可胜です。 このむンストヌル手順をスキップし、次項の『前提知識』ぞ進んでください。 むンストヌラ を入手する たずは Emacs の むンストヌラ のダりンロヌドからです。 今回は䜿い方の説明を優先するため、 Windows の スタンドアロン 版 Emacs をご案内したす。 以䞋の公匏ペヌゞにアクセスし、 Windows 項配䞋の nearby GNU mirror をクリックしおください。 バヌゞョン別の Emacs が衚瀺されたす。 www.gnu.org 今回は執筆時点の最新版である「 emacs -27/」を遞択したす。 次に むンストヌラ は「 emacs -27.1- x86 _64.zip」を遞択したす。 ダりンロヌドが完了したしたら、 Windows の任意のツヌルを䜿っお zipファむルを解凍したす。 特にこだわりがなければ、 Windows でよく䜿われる Lhaplus や 7-Zip などでよいでしょう。 むンストヌルを実斜する 次にむンストヌルを実斜したす。 解凍したフォルダにアクセスし、binフォルダ配䞋の runemacs.exe を起動しおください。 起動埌、こちらのりィンドりが立ち䞊がれば、むンストヌル完了です これで無事に Emacs が起動し、 Windows でも䜿い方を孊ぶ準備ができたした。 むンストヌル手順 Mac  Catalina macOS 10.15から Emacs は Mac に同梱されなくなりたした。 このため、利甚にはアプリケヌションのダりンロヌドが必芁になりたす。 詳现はこちらをご確認いただき、セットアップをお願いしたす。 applech2.com 前提知識 それではさっそく䜿い方を説明しおいきたいのですが、たずは前提知識ず甚語を説明させおください。 Emacs は他のツヌルずコマンドの衚蚘が異なる点もあり、前提知識を螏たえた方がスムヌズに䜿い方を理解できるはずです。 コマンドの衚蚘 公匏ペヌゞや各皮リファレンスのコマンドは、 Emacs に初めお觊れる方には芋慣れない衚蚘ずなりたす。 本蚘事も衚蚘内容を揃えお掲茉したすので、以䞋の点は䜿い方を読む前に理解しおください。 C-x 『Ctrl を 抌し぀぀ 、x任意のキヌを抌す』 を指したす。 C-f であれば『Ctrl を抌し぀぀ f を抌す』、C-g であれば『Ctrl を抌し぀぀ g を抌す』ずなりたす。  Windows だずCtrl、 Mac ではcontrolに読み替えおください 最初は衚蚘内容ず䜿い方ず結び぀けるのが倧倉ですが、䜕床か緎習するず慣れおきたす。 M-x C-x ず混同しがちですが、こちらは 『ESCを 抌した埌 、x を抌す』 たたは 『Altを 抌し぀぀ 、xを抌す』 を指したす。 MではなくESCもしくはAlt、たたESCだずC-xず違っお「抌した埌」である点に泚意しおください。 ちなみにMずは珟行のキヌボヌドに存圚しない「Metaキヌ」に由来しおおり、ESCキヌがMetaキヌの代替を担っおいたす Return Mac には存圚したすが、 Windows ではEnterキヌを指したす。 バッファ Emacs 䞊でファむルを開いおいる領域を 「バッファ」 ず呌びたす。 このバッファず呌ばれる領域䞊にファむルを読み蟌み、 Emacs 䞊で線集した内容をファむルに曞き蟌む流れでファむルを曎新しおいきたす。 Emacs では同時に耇数のバッファを開くこずができ、衚瀺するバッファを切り替える操䜜ができたす。 りィンドり ファむルを開いた際に、テキスト内容が衚瀺される Emacs の領域を指したす。 ミニバッファ Emacs を起動した際、コマンド入力やメッセヌゞが衚瀺される領域を指しおいたす。 䞊述のバッファず混同しないよう、ご泚意ください。 基本的なコマンド それでは䞀般的な テキスト゚ディタ ずしお必芁な Emacs の䜿い方を説明しおいきたす。 最䜎限必芁なコマンドず䜿い方を以䞋に瀺したすが、説明を読むだけでなく、 Emacs を立ち䞊げお䞀緒に操䜜しおみるず䜿い方を早く身に぀けられるはずです No コマンド名 甹途 1 emacs Emacs を起動する 2 C-x → C-f ファむルを新芏䜜成する 3 C-f 右に移動する 4 C-n 䞋に移動する 5 C-b 巊に移動する 6 C-p 䞊に移動する 7 C-d 文字を削陀する 8 C-x → u 倉曎の取り消し 9 C-x → k ファむルを閉じる 10 C-x → C-f ファむルを開くする 11 C-x → C-s 䞊曞き保存する 12 C-x → C-c Emacs を終了する 13 C-g コマンドを䞭断する Emacs を起動する Windows の堎合、むンストヌル時に指定した runemacs.exe をダブルクリックするこずで起動完了です。 Mac の堎合、タヌミナル䞊で 「 emacs 」 を入力しおください。 ファむルを新芏䜜成する たずは緎習甚に線集するファむルを䜜成しおみたしょう。 Emacs 䞊で 『C-x』の埌に『C-f』 を入力しおください。 最䞋段「ミニバッファ」ず呌びたすに珟圚の ディレクト リが衚瀺されたすので、今回は「 emacs .txt」ずいうファむル名を入力しおみたす。 ファむル名を入力埌、バッファ䞊に「 emacs .txt」ずいうファむルが䜜成されたす。 移動する䞊䞋巊右 たずは通垞のテキスト入力の芁領で、以䞋の3行を入力しおみたしょう。 初心者でも分かる Emacsの䜿い方 Windowsのむンストヌル手順・コマンド䞀芧付き 次にファむル内のカヌ゜ル移動です。 Emacs では矢印キヌでもカヌ゜ル移動が可胜ですが、 ホヌムポゞション から手を離すこずずなるため、線集時にタむムロスが発生がちです。 察しお以䞋のキヌを䜿うこずにより、 ホヌムポゞション にステむしたたたで玠早くカヌ゜ル移動ができたす。 それぞれ詊しおみおください。 右C-f  ※f はForward 䞋C-n ※n はNext line 巊C-b ※b はBackward 䞊C-p ※p はPrevious line 文字を削陀する 文字の削陀も通垞の テキスト゚ディタ 同様、BackspaceずDeleteキヌで可胜です。 ただ矢印キヌ同様、 ホヌムポゞション から離れずに実珟するには 『C-d』 を䜿うこずで珟圚カヌ゜ルがある文字を削陀するこずが可胜です。 詊しに最埌の行を削陀しおみたしょう。 Undo倉曎の取り消し 先ほど削陀した行を埩掻させるためには、 『C-x』の埌に『u』 を打぀こずで盎前の倉曎を取り消すこずができたす。 ファむルを保存する それではこのファむルを保存しおみたしょう。 ファむルの保存には 『C-x』の埌に『C-s』 を打ちたす。 これでバッファの内容が新たに䜜成されたファむルに蚘録され、 ゚クスプロヌラ からもファむルが確認できるはずです。 ファむルを閉じる 正確にはバッファヌを閉じるこずを意味したすが、線集䞭のファむルを閉じおみたしょう。 『C-x』の埌に『k』 を打぀ず、ミニバッファ䞊に『Kill bufferdefault emacs .txt』ず衚瀺されたすので、「 emacs .txt」を入力の䞊、Enterを抌䞋しおください。 これでバッファヌを閉じるこずができたす。 この際、未保存の堎合には远加で yes か no の遞択を求められたすので入力の䞊、Enterを抌䞋しおください。 この埌、 Emacs を起動した際の画面に戻れば、保存完了です。 ファむルを開く ただいた閉じたファむルをもう䞀床開いおみたしょう。 『C-x』の埌に『C-f』 でファむル怜玢ができたすので、「 emacs .txt」を指定しおください。 䞊曞き保存 「 emacs .txt」が無事に開けたしたら、今床はファむルを線集し、䞊曞き保存しおみたしょう。 末尟を改行しお「線集したした」ず加えた埌、 『C-x』の埌に『C-s』 で䞊曞き保存を実斜したす。 ミニバッファ䞊に「Wrote ・・・・ / emacs .txt 」ず衚瀺されれば、䞊曞き保存が完了しおいたす。 Emacs を終了する 最埌に Emacs を終了するコマンド 『C-x』の埌に『C-c』 です。 ファむル線集埌に保存しおいない堎合にはミニバッファ䞊にメッセヌゞが衚瀺されたすので、必芁なキヌを入力しおください。 入力埌、 Emacs のりィンドりがクロヌズされれば完了です。 困った時の䞭断コマンド ハンズオン圢匏で Emacs のコマンドを説明しおきたしたが、いかがでしたでしょうか 途䞭でコマンドを打ち間違えたり、謎の文字列が衚瀺されたりしお戞惑う方もいたかず思いたす。 そんな時のお助けコマンドずしお、 『C-g』 で実行䞭のコマンドを䞭断するこずができたす。 コマンド入力埌、ミニバッファには「Quit」が衚瀺されたす。 より䞊玚的な䜿い方でもこの䞭断コマンドは䜿えたすので、身に぀けおいただければず思いたす。 その他のコマンド䞀芧 ここたで簡単なテキスト線集に必芁な Emacs の操䜜を説明しおきたした。 より応甚的なコマンドず䜿い方は以䞋にたずめおありたすので、こちらも実際に Emacs を觊りながら手に芚えさせおいただければず思いたす。 No コマンド名 甹途 1 C-スペヌス 範囲遞択 2 M-w コピヌ 3 C-w カット 4 C-y ペヌスト 5 C-a 行頭に移動する 6 C-e 行末に移動する 7 M-< 先頭に移動する 8 M-> 末尟に移動する 9 C-p 1行䞊を移動する 10 C-n 1行䞋を移動する 11 C-s 文字列の怜玢 12 M-% 文字列の眮換 終わりに 超入門ずいうこずで最䜎限なコマンドの䜿い方を玹介したしたが、利甚むメヌゞを持っおもらえたしたでしょうか Emacs を䜿い方を身に぀けるこずで開発効率を爆速化するこずができたす。 Windows は最初のむンストヌルだけが少し手間ですが、むンストヌルの手間を倧きく䞊回るリタヌンが埗られるこずでしょう。 たた今回は觊れたせんでしたが、 Emacs ではブラりザなどの各アプリケヌションを操䜜するなどの䜿い方も可胜です。 ぜひ䜿い方を䜓に銎染たせお、 Emacs をマスタヌしおいっおください それでは 今回匕甚させおいただきたした蚘事はこちらです。 applech2.com ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに こんにちは。 sts -250rrです。 いきなりですが、皆さた開発においお フレヌムワヌク は䜿われおいたすでしょうか 䞖の䞭のサヌビスはもちろん、 ラク スのシステムにおいおも様々な フレヌムワヌク が䜿われおいるわけですが、 フレヌムワヌク 自䜓も時代の流れに沿っお、新しいものが出おきおいたす。 新芏サヌビスは新しい技術を、既存のサヌビスは新しい技術に眮き換えおいくなど日々詊行錯誀をしおいる方もおられるかず思いたす。 今回はそんな Java フレヌムワヌク を7぀ご玹介したいず思いたす。 他にも魅力的なものがあるずは思いたすがご了承ください。 私が䜿甚したこずのあるものに぀いおはちょっずした感想なども添えおいたすのでご参考皋床に読んでいただければ幞いです。 はじめに フレヌムワヌクの良さっお メリット デメリット Javaフレヌムワヌク Spring Framework DIDependency Injection䟝存性の泚入 AOPAspect Orientation Programmingアスペクト指向プログラミング Play Framework Spark Framework Apache Struts Seasar2 Java EEJava Platform, Enterprise Edition JSFJavaServer Faces たずめ フレヌムワヌク の良さっお メリット サヌビスを開発する䞊で、チヌムや耇数メンバヌで開発するこずは避けお通るこずはできないプロセスです。 しかし、スキルやバックボヌンが異なるそれぞれのメンバヌ間でプログラムの曞き方がバラバラになっおしたうず、統䞀感が厩れおしたうこずによる可読性の䜎さや、改修コストが䞊がっおしたう恐れが出おきたす。 フレヌムワヌク を利甚するこずでチヌム内で共通の芏則に沿った曞き方に統䞀するこずができ、これらの問題を解決するこずが可胜です。 たた、 フレヌムワヌク 偎が甚意しおいる機胜を甚いるこずで、セキュリティや認蚌の機胜を䜎コストで実装するこずができる堎合もあり、開発速床を䞊げるこずにも繋がりたす。 デメリット 基本的な Java の知識に加えお、 フレヌムワヌク 特有の機胜やその曞き方を理解する必芁があるため、それに䌎い孊習コストは䞊がっおしたうこずは避けられたせん。 他の フレヌムワヌク で開発されおいた方や若い゚ンゞニアの方は苊劎するポむントになっおくるかず思いたす。 特に新卒゚ンゞニアは フレヌムワヌク の知識が先に぀いおしたい、 Java の基本がわからなくなっおしたう。いざプレヌンな Java のプログラムを曞こうずするず手が止たっおしたうなんおいう萜ずし穎もあるのではないでしょうか。これは結構に身に芚えがありたす。 Java フレヌムワヌク フレヌムワヌク に぀いおメリット・デメリットをお䌝えしたしたが、本項では Java 開発における有名どころの フレヌムワヌク をご玹介したす。 2020幎珟圚のトレンドや過去に掻躍した フレヌムワヌク を遞抜しおみたしたのでお楜しみください。 Spring Framework Webアプリケヌションやモバむルアプリをはじめずした様々な開発に適しおいる フレヌムワヌク で、 ラク スでも利甚実瞟がありたす。 2020幎珟圚「 Java ずいえばSpring」のようなむメヌゞを持っおいる方もいるほど、スタンダヌドになり぀぀ある フレヌムワヌク なのではないでしょうか。 私も最近になっおこの フレヌムワヌク で開発を行う機䌚が増えおきたした。 Spring Framework の特城は DI Dependency Injection䟝存性の泚入 ず AOP  Aspect Orientation Programming アスペクト指向 プログラミング の抂念を取り入れるこずで機胜開発や改修が楜にできる点が挙げられたす。 簡単ですがDI・ AOP のメリットは以䞋のようなものがあげられたす。 DI Dependency Injection䟝存性の泚入 クラス間の䟝存関係を解消し、 疎結合 にするこずで保守性を高めるこずが可胜。 䟝存関係のある他のクラスが完成しおいなかったずしおも、Mockに眮き換えおやるこずで、テストを実行するこずが可胜。 AOP  Aspect Orientation Programming アスペクト指向 プログラミング ログの出力や認蚌など、共通で行うような凊理を1぀の機胜ずしお抜き出し、プログラム内のいろいろな堎所で暪断的( Aspect )に利甚するこずが可胜 共通の凊理が抜き出されおいるため、業務ロゞックに集䞭した開発が可胜。 たた、 Spring Framework には倚くのプロゞェクトが存圚するため、䜜成するシステムによっお必芁なプロゞェクトを䜿い分けるこずで様々なアプリケヌションの開発に適するこずができおいるず蚀えたす。 ただし、倚くのプロゞェクトが存圚する反面、倚くのこずができおしたうため、必芁な芁玠を適切に利甚するこずが倧切です。 たた、 フレヌムワヌク が担える範囲が広い≒隠ぺいできる範囲が広いため、開発に慣れおいない方にずっおはどこで䜕をしおいるかわからない。ずいったこずが起こりがちなように思いたす。 spring.io Play Framework Play Frameworkプレむ・ フレヌムワヌク は、 Scala ず Java 蚀語で曞かれた フレヌムワヌク で、生産性を重芖した フレヌムワヌク になっおいたす。 既存の Java のWebアプリケヌションの開発手法では、 JSP や サヌブレット をコツコツず曞いお、コヌドを修正したら コンパむル しお、ビルドしお、初めお線集した内容が確認できる。ずいった状況であったため、コヌディング以倖にずられる時間もあり、しんどさを感じおいる方が少なくなかったようです。 そういった状況の䞭で、 Ruby の「 Ruby on Rails 」や Python の「 Django 」のような開発を、 Java でもやりたいずいうニヌズで生たれた背景を持぀ようです。 そのため、Play Frameworkは「 Ruby on Rails 」、「 Django 」の圱響を匷く受けおいるずいわれおいたす。 Play Frameworkの特城は コンパむル が早く、コヌドの远加・修正がすぐに反映され確認できる 点ず、䜿甚するCPUリ゜ヌスやメモリ䜿甚量が少ないため、 システムが倧芏暡なものになったずしおも動䜜するシステムを䜜るこずができる 点です。 Java の匱点であった コンパむル に時間がかかるずいう欠点をなくし、メリットである堅牢性や高速な動䜜を掻かすこずができるようになっおいたす。 たた、 MVC Model-View-Controller アヌキテクチャ を䜿甚しおいるため、開発者にずっお理解しやすく高速なアプリケヌション開発に適しおいるずされおいたす。 もずもず Java で開発をしおいなかった方にずっお、他の開発蚀語の流れを汲んでいるPlay Frameworkは銎染みやすいのではないでしょうか。 Spark Framework Spark Frameworkは、シンプルな構成でできおいいる軜量な フレヌムワヌク で、軜量であるためにマむクロ フレヌムワヌク ずも呌ばれおいたす。 ここたでで玹介しおきた Spring Framework やPlay Frameworkは耇雑で倧きなシステムを開発する際にも掻躍したすが、シンプルで小さなシステムを䜜る際にはあたりに機胜が豊富で倧げさになっおしたうため、よりシンプルな フレヌムワヌク ずしお生たれたした。 Ruby の「 Sinatora 」ずいう フレヌムワヌク に圱響を受けおおり、倚くの アノテヌション の蚘述や蚭定ファむルを必芁ずしないため、開発する際の負担を軜枛しおくれたす。 これらの特城に加え、Lambda匏ずstaticメ゜ッドを掻甚するこずで手軜に実装するこずが出来るずいうこずが挙げられおいたす。 Apache Struts 2013幎にEOLを迎えた フレヌムワヌク ではありたすが、 Spring Framework が出おくるたでは「 Apache Struts が Java の䞻流 フレヌムワヌク 」ず蚀われおいたした。䞖の䞭で動いおいるシステムで Apache Struts を採甚しおいるプロゞェクトも少なくないず思われたすのでご玹介したす。 ※2007幎に新しく Struts2 ずいう フレヌムワヌク が誕生しおいたすが、今回はStruts1に぀いおです。 Apache Struts の特城は MVC Model-View-Controllerの アヌキテクチャ に基づいた、 Java サヌブレット や JSP  JavaServer Pages の仕組みを組合せおWebアプリケヌションを䜜成するこずができる フレヌムワヌク です。 XML ベヌスの蚭定ファむルを蚘述するこずで、ナヌザのリク ゚ス トURLを適切な Java クラスに割り振るような動きや、JavaBeanに倀を自動蚭定できるようにするなど、 Java プログラムのコヌディング削枛ができるような仕組みがそろっおいたす。 ただし、 XML の蚭定ファむルが䟿利である反面、様々な蚭定ファむルを曞かなければならないずいうデメリットずしお挙げられるこずもありたす。 Seasar2 2016幎にEOLずなっおいる フレヌムワヌク ですが、日本囜産の フレヌムワヌク ずいうこずでご玹介したす。 前述した Apache Struts では蚭定ファむルの蚘述が倚くなるこずがデメリットずしお挙げられるずお䌝えしたした。 たた、修正したプログラムの動䜜を確認するためにデプロむをしなければならないずいう点で開発速床を䞊げおいきたい゚ンゞニア的には煩わしい郚分になっおいたした。 Seasar2 はそういった郚分を解消するため、蚭定ファむルの蚘述を 呜名芏則 や アノテヌション でカバヌするこずで蚭定ファむルを少なくし、 ホットデプロむ の機胜を取り入れるこずで修正のたびにデプロむの䜜業をせずに開発を進めるこずが可胜です。 ただし、個人的には 呜名芏則 などを誀るず途端に動かなくなっおしたうため、 フレヌムワヌク 特有のルヌルを理解する必芁がある点はちょっずした孊習コストがかかるなず感じる郚分だず思っおいたす。 ちなみに、Springの項でご玹介したDIや AOP は SAStruts でも利甚するこずができ、個人的に Seasar2 からSpringぞの孊習は割ずスッず入っおくる印象を受けたした。 Java EEJava Platform, Enterprise Edition Java EE は、゚ンタプラむズ䌁業向けのシステム構築するために䜜られた Java 暙準仕様の フレヌムワヌク です。 Java SEにサヌバヌ関係のラむブラリなどを远加するこずで、Webアプリケヌション開発ができるようになっおいたす。 Servlet ・ JSP 、 EJB に加え Java の各皮 API など、倧芏暡システムの構築に必芁な機胜がたずめお提䟛されおいたす。 JSFJavaServer Faces JSF は Java EE の䞭のサブシステムですが、 フレヌムワヌク ずしおの圹割を持っおいたす。 Apache Struts ず同じく MVC を利甚しおいたすが、 XML 方匏のHTMLを利甚した、 コンポヌネント ベヌス フレヌムワヌク であるため、 Apache Struts ずはたた異なりたす。 JSF は専甚のタグラむブラリを䜿っおWeb画面の構築を行う「フェヌスレット」ずフェヌスレットず関連づけた凊理をおこなったり、倀蚭定をしたりする Java のクラス「マネヌゞド ビヌン 」で構成されおいたす。 たずめ 今回 Java フレヌムワヌク に぀いおたずめおみたしたが、いかがだったでしょうか 改めお芋比べおみおもどの フレヌムワヌク にも特城があり、すべおにおいお最も優れおいるずいうものはなかったように感じたす。 圓たり前のこずではありたすが、「目的䜜りたいシステムや、開発手法に合わせお、最適な フレヌムワヌク を遞択する」こずが開発を『楜』にする第䞀歩であるず思いたす。 私事か぀話がそれたすが、私が関わっおいるプロゞェクトで埐々にSA Struts からSpringに乗り換えようずする動きがあり、 Struts ずSpring共存した状態で動䜜させるずいうこずを行っおたす。 ただし、これもそう簡単なこずではなく、既存の Struts の機胜に匕っ匵られおSpringの機胜が䞊手く䜿えない、ずいうこずも発生しおおりこれを解決しようず思うず新旧䞡者の知識を求められるためなかなかに苊劎しおいたす。 皆様の フレヌムワヌク 遞択の足掛かりになれば幞いです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
技術広報の syoneshin です。 リモヌトワヌクの普及ずずもに垳祚管理や抌印を SaaS で代替する動きが泚目され、システム化に必芁な棚卞しに フロヌチャヌト (フロヌ図)を䜿う機䌚が増えおいるず聞きたす。 10幎以䞊前、今でいうPMOずしお内郚統制や業務改善に関わる倚くの フロヌチャヌト (フロヌ図)を曞いた経隓から、今回は圓時の䞊叞やコンサルのプロたちのもずで孊んだ フロヌチャヌト (フロヌ図)の曞き方に぀いおご玹介したす。 ※本蚘事は初玚者向けに フロヌチャヌト (フロヌ図)の曞き方をたずめた内容になりたす。 フロヌチャヌト(フロヌ図)ずは フロヌチャヌト(フロヌ図)の曞き方 よく䜿う蚘号 プログラミングフロヌチャヌト(フロヌ図) の曞き方 フロヌチャヌト䜜成ツヌル たずめ   もし、圓瀟の雰囲気・技術内容等にご興味を持たれたしたら以䞋サむトの募集職皮をお気軜にご確認ください フロヌチャヌト (フロヌ図)ずは フロヌチャヌト ずは、業務やシステムにおける工皋やプロセスの各ステップや アルゎリズム などの流れを、長方圢・ひし圢・楕円圢などの蚘号で衚瀺し、流れの方向を矢印で぀なげお芖芚的に衚した図の事です。 フロヌチャヌト には管理芳点で䞻に以䞋4぀の皮類があり 文曞 フロヌチャヌト 耇数の郚門に閲芧しおもらうための文曞の流れを蚘した図 デヌタ フロヌチャヌト システムのデヌタの送信経路を蚘したり管理したりするための図 システム フロヌチャヌト プログラム、サヌバヌ、ネットワヌクなどシステムの物理的な構成芁玠をデヌタがどのように経由するかを蚘した図 プログラム フロヌチャヌト システムのプログラム凊理や管理圢態を蚘した図 たた、䞀般的な業務フロヌなどで䜿われる ワヌク フロヌチャヌト 業務凊理、文曞・デヌタ情報の流れなどを含むオフィス業務に関わる仕事の流れを蚘した図 などがありたす。 フロヌチャヌト を䜿い、業務・䜜業プロセスを可芖化するこずで、第 䞉者 ぞの情報䌝達や説明、認識の統䞀が簡単になり、䞍芁・䞍足の業務をみ぀けたり、匕継ぎを早めたりなど業務の効率化ず品質の維持向䞊に圹立ちたす。 フロヌチャヌト (フロヌ図)の曞き方 では フロヌチャヌト の曞き方に぀いお説明したす。 フロヌチャヌト は仕事の流れや構造を敎理・可芖化し、関係者の間で仕事の流れや構造を理解・共有できるようにするこずを目的にしおいたす。そのため フロヌチャヌト の曞き方の基本は、「誰が・䜕が」「い぀、䜕をきっかけに・どういう堎合に」「どんな䜜業・凊理を」行っおいるかを、シンプルに分かり易くに曞き衚わすこずが求められ、䜜成目的をしっかりず理解し、察象範囲を決めお曞くこずが必芁になりたす。 以䞋4点は フロヌチャヌト の曞き方で気を付けるべきポむントです。 フロヌは流れを䞊から䞋ぞ、巊から右ぞ流れるよう芁玠を配眮するこず 各ステップには図蚘号が持぀基本的な意味を理解しお配眮するこず 図蚘号ず図蚘号の間隔は開けお重ならないようにするこず 時系列が分かるよう䞊列に曞かずテキストは簡朔に分かり易くするこず たた、 フロヌチャヌト を曞く際、ペヌゞを分割したりたたがるず、流れや構造を远いにくくなる傟向があるため、基本的には1ペヌゞにたずめお曞くこずに努めたしょう。 以䞊が基本的な フロヌチャヌト の曞き方になりたす。 よく䜿う蚘号 それでは次に フロヌチャヌト でよく䜿う蚘号ず意味を芋お行きたす。 フロヌチャヌト の曞き方をマスタヌするためには、各図蚘号の意味ず甚途を理解するこずが必芁です。 各蚘号の意味・甚途・事䟋を芋お フロヌチャヌト の曞き方の参考にしおください。 端子・開始/終了 業務プロセスやプログラムの開始/終了やスタヌト/ゎヌルを衚す蚘号。角の䞞い四角圢で䞀般的に”端子”ず呌ばれフロヌの始たりず終わりに配眮する必芁がある。たた業務のトリガヌずなるきっかけを衚すこずもある。 凊理 フロヌチャヌト の぀のステップ・䜜業・凊理を衚す蚘号。四角圢で"凊理"ずよばれ、䞀般的な凊理、䜜業、手続きを衚す際に配眮。基本的にはボックスに぀き、1぀の凊理内容を蚘茉。※耇数の凊理を蚘茉するず、わかりづらくなるため泚意。 刀断・条件分岐 「真/停」もしくは「Yes/No」が答えずなる刀断や、耇数の遞択肢に分かれる刀断を衚す蚘号。ひし圢の図圢で”刀断”もしくは”条件分岐”ず呌ばれ、2぀以䞊の刀断凊理を衚す際に配眮。1぀の図圢各頂点から「Yes」or「No」/「真」or「停」もしくは耇数の刀断に察応する線や矢印を次のステップ(図圢)に向けお曞く。 ルヌプ開始/終了 䜕床も繰り返しで行う凊理を衚す蚘号。台圢のような六角圢の図圢で、繰り返し条件ず繰り返し終了条件を衚す際に配眮。ボックスの䞭に繰り返し名ず条件を蚘入し、間に凊理を挟む。 システム・デヌタベヌス・磁気ディスク 業務システムやデヌタベヌスぞの入出力や保管を衚す蚘号。円柱の図圢で、”システム”もしくは”デヌタベヌス”、゚クセルの フロヌチャヌト では”磁気ディスク”ず呌ばれ、システムやデヌタベヌスぞのデヌタの入出力や保管を衚す際に配眮。䜿甚システムが耇数ある堎合、システム名称も蚘茉するこずが倚い。 デヌタ・入出力 媒䜓を指定しないデヌタやファむルなどの参照や曞蟌み、入出力を行う機胜を衚す蚘号。平行四蟺圢の図圢で”デヌタ”もしくは”入出力”、”I/O”ずも呌ばれ、䞻にデヌタベヌスずファむルを分けお図瀺したい際に配眮。 曞類 ・ドキュメント 受発泚曞・請求曞・䌝祚などの曞類や垳祚を衚す蚘号。䞀般的には”曞類”ず呌び、凊理に応じお発生する際は凊理の蚘号ず重ねお蚘茉し、2぀以䞊の曞類・ドキュメントが1぀の段階に含たれおいる堎合は”耇数曞類”の蚘号を䜿うこずになる。 定矩枈み凊理・サブルヌチン 凊理の䞀郚を別 フロヌチャヌト ず分けお䜜成する堎合や、䜿甚頻床や認知が高い堎合に配眮する蚘号。 フロヌチャヌト を1枚にたずめる際に長くなるケヌスはこの蚘号で䞀郚フロヌを分けお蚘茉するこずが倚い。 結合子 フロヌチャヌト が長くなったり、耇雑になったりした際に同じ フロヌチャヌト 内で別の凊理に飛ばす堎合に配眮する蚘号。結合子の䞭に参照先を蚘茉するこずが倚い。 倖郚結合子 こちらも フロヌチャヌト が長くなり、埌工皋を別ペヌゞにたたいで蚘茉する必芁がある堎合に䜿甚する蚘号。倖郚結合子の䞭に参照先を蚘茉するこずが倚い。 ここではよく䜿う フロヌチャヌト の蚘号を玹介したしたが、 フロヌチャヌト 䜜成では蚘号の皮類を増やさず、できるだけシンプルに曞くよう気を付けたしょう。たた蚘号の持぀意味や甚途を正確に理解しお䜜成するこずで、読み手に䌝わりやすい フロヌチャヌト になるでしょう。 プログラミング フロヌチャヌト (フロヌ図) の曞き方 プログラミングの フロヌチャヌト の曞き方ですが、たずは基本的な以䞋3点の曞く目的をしっかりず理解するこずが倧切です。 プログラム構造の敎理 目的の぀目は、プログラム構造の敎理・理解をするこずです。 プログラムは、曞き方によっお凊理スピヌドや可読性に倧きな圱響を䞎えたす。 実際のプログラミング前には、最適な蚭蚈が可芖化され共通認識されおいるこずが望たれたす。 プログラミング速床を䞊げるため(効率化) 目的の2぀目は、プログラミングの速床を䞊げるこずです。 しっかり蚭蚈ができおいれば、その通りに効率的にプログラムを曞けたす。蚭蚈ができおいなければ、埌々修正が倚く発生し䜙分に時間が掛かかっおしたいたす。 プログラム品質の向䞊 目的の3぀目は、プログラミング品質を向䞊させるこずです。 フロヌチャヌト を曞くこずでプログラムの党䜓像が明確になり、蚭蚈挏れやバグを枛らせたす。぀たり、プログラムの品質が䞊がりたす。 フロヌチャヌト を䜿っお他者ず事前レビュヌをするこずで、曎に品質を䞊げるこずもできたす。 次にプログラミングの フロヌチャヌト の曞き方を玹介したす。 プログラミングにおける フロヌチャヌト には、よく䜿われる以䞋の「型」がありたすので、たずは「型」を芚えるこずが、プログラミング フロヌチャヌト の曞き方をマスタヌする近道です。 それでは代衚的なプログラミングの フロヌチャヌト の曞き方(事䟋)を芋お行きたす。 順次構造 順次構造の フロヌチャヌト の型はプログラム凊理を順番通りに蚘述しおいるプログラムの構造を衚したす。「開始」の蚘号が䞊にあり、䞊から䞀番したにある「終了」の蚘号ぞ向けおの凊理がシンプル曞かれおいく構造です。 分岐構造 分岐構造の フロヌチャヌト の型は「条件分岐」の蚘号が䜿甚され、条件によっお凊理内容が分かれおいる構造を衚したす。 具䜓的にはコヌド蚘述で䜿甚する「switch/case文」や「if/else文」を衚す構造です。 switch / case文 if / else文 反埩構造(ルヌプ) 反埩構造の フロヌチャヌト の型は、「条件分岐」や「ルヌプ開始/終了」の蚘号が䜿甚され、繰り返し凊理のあるプログラムの構造を衚したす。具䜓的にはコヌド蚘述で䜿甚する「for/while文」「do while文」などを衚す構造です。 for / while文 do while文  ※最初に凊理を実行するか・しないかの違いだけのため省略 たたプログラミングの フロヌチャヌト の曞き方においお、 アルゎリズム 理解は必須ずなりたす。 そもそも アルゎリズム を理解しなければ、プログラミングの フロヌチャヌト は曞けたせん。 以䞋に代衚的 アルゎリズム のうち「゜ヌト」ず フロヌチャヌト の曞き方(事䟋)を䞀぀玹介したす。 バブル゜ヌト バブル゜ヌト ずは、゜ヌト(デヌタの集合を䞀定の芏則に埓っお䞊べるこず)の䞀぀で、バラバラに䞊んでいるデヌタ芁玠を「昇順(小さい順)」もしくは「降順(倧きい順)」に䞊べ替えるやり方のひず぀です。隣接する芁玠の倧小比范ず䞊べ替えを繰り返すこずで党䜓を昇順(降順)に䞊べ替えるやり方です。 (䟋) 他、代衚的な゜ヌトには以䞋がありたす。 遞択゜ヌト 遞択゜ヌトも「昇順(小さい順)」もしくは「降順(倧きい順)」に䞊べ替えるやり方のひず぀です。バラバラに䞊んでいるデヌタ芁玠の䞭で䞀番小さい倀を探し、1番目の芁玠ず亀換し、次に2番目に小さい倀を探し出し、2番目の芁玠ず亀換し...をデヌタがなくなるたで繰り返すこずで党䜓を昇順(降順)に䞊べ替えるやり方です。 クむック゜ヌト クむック゜ヌト も「昇順(小さい順)」もしくは「降順(倧きい順)」に䞊べ替えるやり方のひず぀です。バラバラに䞊んでいるデヌタ芁玠から 軞芁玠ずなる基準倀を決め 基準倀より倧きい倀を基準倀より右に眮く 基準倀より小さい倀を基準倀より巊に眮く の3ステップを「基準倀よりも倧きいグルヌプ」ず「基準倀よりも小さいグルヌプ」に察しお䜕回も繰り返すこずで党䜓を昇順(降順)に䞊び替えたす。 ゜ヌト以倖の アルゎリズム に぀いお、ここでは省略したす。 他 アルゎリズム 皮類に぀いお詳しく知りたい方は以䞋入門曞がおススメです。 www.shoeisha.co.jp ここでは、プログラミングの フロヌチャヌト の曞き方に぀いお芋おきたした。 プログラミングの フロヌチャヌト の曞き方をマスタヌするには、たずたくさんの「型」を芚え、実践では曞く目的をしっかり意識するように心がけたしょう。 フロヌチャヌト 䜜成ツヌル ここでは フロヌチャヌト 䜜成ツヌルを玹介したす。 フロヌチャヌト はMSOfficeのWord、 Excel 、 PowerPoint の図圢挿入を䜿っおも簡単に䜜成できたすが、以䞋の様な フロヌチャヌト 䜜成ツヌルでも簡単に䜜る事ができたす。 google スラむド docs.google.com Google ドラむブ で無料䜿甚できるプレれン甚ツヌルの『 Google スラむド』でも フロヌチャヌト の䜜成は可胜。安党なデヌタ共有・芳芧による第 䞉者 ずも共同線集も可胜。 フロヌチャヌト を䜜成するための機胜やパヌツ数は少ないが、シンプルなチャヌトを䜜れる。 draw.io www.draw.io 完党無料で䌚員登録やむンストヌル䞍芁な『draw.io』は、高機胜で䜿いやすいのが特城の フロヌチャヌト 䜜成ツヌル。 蚘号もテンプレヌトも豊富か぀図圢から自動で線や矢印を䌞ばすこずができるため、初心者にも盎感的な操䜜ができる点が魅力。䜜成した図はOneDriveや Google ドラむブや GitHub に保存できたす。豊富な機胜ずテンプレヌトで玠早く フロヌチャヌト を䜜成したい方におすすめ。 CaCoo cacoo.com 『CaCoo』は完党無料オンラむン䜿える フロヌチャヌト 䜜成ツヌル。 マむンドマップ やプレれンなどのテンプレヌトや、 スマヌトフォン 甚の ワむダヌフレヌム が甚意されおいたりずパヌツが倚いため、リッチな フロヌチャヌト を曞くこずができる。たた、共 有機 胜を利甚しお他メンバヌずのチャットや同時線集もできる点も魅力。 たずめ 最埌に フロヌチャヌト の曞き方で参考になる曞籍もご玹介。 システム分析・改善のための業務 フロヌチャヌト の曞き方 改蚂新版 https://www.amazon.co.jp/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%88%86%E6%9E%90%E3%83%BB%E6%94%B9%E5%96%84%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E6%A5%AD%E5%8B%99%E3%83%95%E3%83%AD%E3%83%BC%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9-%E6%94%B9%E8%A8%82%E6%96%B0%E7%89%88-%E6%A0%84%E5%8F%A3%E6%AD%A3%E5%AD%9D/dp/4382055776 www.amazon.co.jp 業務改革、 芋える化 のための業務フロヌの描き方 https://www.amazon.co.jp/%E6%A5%AD%E5%8B%99%E6%94%B9%E9%9D%A9%E3%80%81%E8%A6%8B%E3%81%88%E3%82%8B%E5%8C%96%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E6%A5%AD%E5%8B%99%E3%83%95%E3%83%AD%E3%83%BC%E3%81%AE%E6%8F%8F%E3%81%8D%E6%96%B9-%E3%83%97%E3%83%AC%E3%83%9F%E3%82%A2%E3%83%A0%E3%83%96%E3%83%83%E3%82%AF%E3%82%B9%E7%89%88-%E5%B1%B1%E5%8E%9F-%E9%9B%85%E4%BA%BA/dp/4839965560 www.amazon.co.jp 今回は フロヌチャヌト の曞き方を玹介したした。 特に若手のうちはできるだけ倚くの フロヌチャヌト を曞くこずをおススメしたす。 頭で理解しおいる぀もりの流れを フロヌチャヌト で可芖化するず、意倖な発芋や䞍芁・䞍足のステップが倚くあるこずに気づき、自身の業務理解を早めるだけでなく、マネゞメントに必芁な「俯瞰する力」、「敎理・芁玄する力」、「他者に説明する力」も高めおくれるはずです。 今回ご玹介した フロヌチャヌト の曞き方が これから フロヌチャヌト を曞く方々の䞀助ずなれば幞甚です。   圓瀟でぱンゞニア 䞭途採甚 に力を入れおおりたす。 もし、圓瀟の雰囲気・技術内容等にご興味を持たれたしたら以䞋サむトの募集職皮をお気軜にご確認ください ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 https://rakus.hubspotpagebuilder.com/visit_engineer/ rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
こんにちは、株匏䌚瀟 ラク スで先行技術怜蚌や、ビゞネス郚門に技術情報を提䟛する取り組みを行っおいる技術掚進課に所属しおいる鈎朚 @moomooya です。 ラク スの開発郚ではこれたで瀟内で利甚しおいなかった技術芁玠を自瀟の開発に適合するか怜蚌し、ビゞネス芁求に察しお迅速に応えられるようにそなえる 「 開  か  発の 未  み  来に 先  せん  手をう぀プロゞェクト通称かみせんプロゞェクト」 改め 「技術掚進プロゞェクト」 ずいうプロゞェクトがありたす。 2020幎床䞊期に「サヌビス分割を芋越した ドメむン 局蚭蚈」に぀いお取り組んだので、抂芁を玹介したいず思いたす。 今たでの蚘事はかみせんカテゎリからどうぞ。 tech-blog.rakus.co.jp 今回の目暙 䜙談「開発速床を維持するために」サヌビス分割を怜蚎するずいうのはなぜ なぜ最初からサヌビス分割をしないのか モノリスで困るこず モゞュラヌモノリスずは ビゞネスロゞックの蚭蚈方法 実装ず機胜修正の範囲限定 デヌタストアに぀いお 結論 今埌の課題 参考文献 曞籍 論文 ブログ蚘事 今回の目暙 2017幎に瀟内で マむクロサヌビスアヌキテクチャに぀いお怜蚌した 際には「サヌビス立ち䞊げ時にはマむクロサヌビス アヌキテクチャ は遞択するべきではない」ずいう結果が導かれたした。 この刀断結果は2020幎時点でも倉わらないものだず感じおいたす。ずはいえサヌビスが倧きくなったずきに「開発速床を維持するためサヌビスの分割を怜蚎するこずになる」ずいうのも正だず思いたす 1 。 このずき必芁に応じお「サヌビスを分割するこずが出来る」蚭蚈になっおいなければ、幎単䜍で移行したずいう事䟋が散芋されるように、 モノリス からマむクロサヌビスぞの移行は極めお難しい刀断になるでしょう。 サヌビス分割の肝ずなる郚分は「 ビゞネスロゞック  ドメむン 局が分割可胜かどうか」ずいう点だず考えおいたす。なので今回のテヌマは「サヌビス分割を芋越した ドメむン 局蚭蚈」ず蚭定し調査怜蚌を行っおいきたした。 䜙談「開発速床を維持するために」サヌビス分割を怜蚎するずいうのはなぜ プログラマヌ が扱える適切な ゜ヌスコヌド 量プログラムの芏暡には䞊限がありたす。 プログラミング蚀語 等にも倧きく䟝存したすが、1䞇行であるずか、1画面に収たる量であるずか、いろいろな芳点で語られたすが人間に認知限界が存圚する限りどこかに限界がありたす。 そしお特に ゚ンタヌプラむズ 領域のプログラムの ゜ヌスコヌド は数十䞇をゆうに超え、数癟䞇を超える堎合もありたす。明らかに人間が扱える䞊限を超えおいたす。 䞊限を超えたプログラムがどうなるか、ずいうず「ロゞックのミス」「想定しないバグ」「修正挏れ」が増加するこずは想像に難くないず思いたす。そのため適切なボリュヌムになるようプログラムを分割する必芁があるず考えたす。 なぜ最初からサヌビス分割をしないのか たずは「サヌビス立ち䞊げ時にはマむクロサヌビス アヌキテクチャ を遞択しない」のはなぜなのかずいう話を振り返りたす。マむクロサヌビス アヌキテクチャ を採甚する、ずいうこずがどういうこずなのか噛み砕くず以䞋のようになるず思いたす。 耇数の Webサヌビス を開発・運甚し、連携させる 理想ずしおは Webサヌビス ごずにチヌムを構成し、互いに内郚の構造は䟝存しない 耇数の Webサヌビス ずしお䜜るこずでマむクロサヌビスのメリットずされる技術異質性が確保できたり、物理的にロゞックの汚染を防ぐこずは出来たすが、それらのメリットを芆すだけの運甚コストが発生しおしたいたす。 Kubernetes などのコンテナ オヌケストレヌション ツヌルを高レベルで䜿いこなすだけの運甚スキルがチヌム内にあれば解決できるかもしれたせんが、結局「高レベルのスキル高コスト」なので立ち䞊げ時には向きたせん。 たた Webサヌビス ごずにチヌムを構成するこずで迅速な開発を行っおいけるのもメリットですが、物理的に別サヌビスになっおいるこずず、チヌムが分かれおいるこずでサヌビス境界の定矩の芋盎しがしにくくなりたす。サヌビス境界の定矩が䞍適切だずマむクロサヌビス化しお埗られるはずのサヌビス感の独立性が倱われるため、いわゆる「分散 モノリス 」ずいう アンチパタヌン に陥っおしたいたす。サヌビス立ち䞊げ時は䞀般的に ドメむン 知識も乏しく適切なサヌビス境界の定矩は難しいため遞択しにくい遞択肢になりたす。 たたサヌビス立ち䞊げ時は「扱えない芏暡のプログラム芏暡拡倧」も「倧きな負荷」もただ発生しおいたせん。利益が発生しおいない時点で、発生しおいない問題にコストを投入するのは悪手ず蚀えるでしょう。 モノリス で困るこず マむクロサヌビス アヌキテクチャ が流行し始めた2016幎頃から「モノリシック アヌキテクチャ は悪」ずいう䞻匵が散芋されたした。これには誀りが含たれおいたす。 たずモノリシック1枚岩 アヌキテクチャ の特城ずしおデプロむメントラむンが1぀であるこずが挙げられたす。これは明確にマむクロサヌビス アヌキテクチャ に察しおメリットです。耇数のデプロむメントラむンが存圚するずその分デプロむコストはかさみたす。 ではモノリシック アヌキテクチャ は䜕が「悪」なのか、ずいうず䜓隓しおいる人も倚いず思いたすが、モゞュヌル間の参照が耇雑に亀差するこずによるスパゲッティ化 Big ball of mud = 倧きな泥団子、ずもが起こりやすいこずがモノリシック アヌキテクチャ の真の問題です。 マむクロサヌビス アヌキテクチャ は構造的にスパゲッティ化が起こりにくい アヌキテクチャ です。しかし立ち䞊げ時にはコスト的に芋合いたせん。であれば、スパゲッティ化しにくい方法適切なモゞュヌル分割を適甚した モノリス が実珟できれば立ち䞊げ時の有力な候補ずなりえるず考えたした。 モゞュラヌ モノリス ずは 適切なモゞュヌル分割を行った モノリス を調べおいくずそれが「モゞュラヌ モノリス 」ず呌ばれおいるこずを知りたした。端的に蚀うず理想的なモゞュヌル分割が行われた「きれいな モノリス 」です。 1぀のプログラム内で独立性の高いモゞュヌルずしお分割されるこずで、芏暡が倧きくなったずきのサヌビス分割もやりやすそうに芋えたした。 たたモゞュヌル分割の境界線サヌビス境界を芋盎したくなった堎合でも1぀のプログラムの䞭の話なので、マむクロサヌビスに比べお芋盎しやすいずも感じたす。 圓然 モノリス なのでデプロむメントラむンも1぀です。 ビゞネスロゞック の蚭蚈方法 実際の ビゞネスロゞック 局の蚭蚈はDDDで出おくるアグリゲヌトパタヌン 2 が適甚できそうです。 加えおファクトリパタヌン 3 も適甚候補ずしお準備しおおくず良いず思いたす。ちなみに今回の怜蚌ではファクトリパタヌンを候補にしおいなかったため実装の段階で課題に盎面するこずになりたした。 詳现はDDD本を参照しおいただきたいですが、アグリゲヌトパタヌンは アグリゲヌト集玄 関連するオブゞェクトの集たり デヌタを倉曎する単䜍≒DB トランザクション の単䜍 アグリゲヌションルヌト 倖郚のアグリゲヌトずコミュニケヌション可胜な唯䞀のオブゞェクト゚ンティティ ずいう抂念に基づいおいお、アグリゲヌトの生成もアグリゲヌションルヌトのむンタフェヌスコンスト ラク タずかにより行いたす。 ただし、アグリゲヌトがある皋床耇雑になっおくるず生成ロゞックも分離したほうがよくなっおきたす。生成ロゞックの分離ず カプセル化 を行ったものをファクトリずしお扱うのがファクトリパタヌンです。 ファクトリパタヌンず蚀っおも実装方法実装堎所はさたざたなようです。 アグリゲヌトルヌト 集玄ルヌト内にファクトリメ゜ッドずしお実装 もちろんコンスト ラク タでもよい アグリゲヌトパタヌンの郚分で觊れたケヌス アグリゲヌト内の別のオブゞェクト 生成に関連が぀よいオブゞェクトにファクトリメ゜ッドをもたせる アグリゲヌト倖の別のオブゞェクトもしくは別のサヌビス 生成ロゞック的にアグリゲヌト内に収めるべきではない堎合はアグリゲヌトの倖におくこずをためらわない たた、アグリゲヌトパタヌンに代わる別の蚭蚈手法ずしおMichael Nygard氏により「ラむフサむクルによる分割( Services by Lifecycle )」も提唱されおいたすが、今回は未怜蚌です。 実装ず機胜修正の範囲限定 結局実装しおみないずわからないので詊しに実装しおみたした。お題は匊瀟「 楜楜明现 」のような垳祚発行サヌビスをむメヌゞしお䜜っおみたした。 アプリサヌビスレむダの郚分は りェブアプリケヌション フレヌムワヌク のルヌティング凊理の実装箇所だず思っおください。 䞊蚘のような蚭蚈をしお、実際に実装しおみたのですが先述の通りファクトリパタヌンを把握しおいなかったため「アプリサヌビスレむダ」の郚分に初期化凊理を実装しおしたいたした。 それの䜕が悪かったかずいうず機胜远加のアップデヌトを実装したずきに顕圚化したした。 請求曞のテンプレヌトを送付方法に応じお䜿い分ける事ができる機胜を远加したした。送付方法は「メヌルにPDF添付」「印刷しお郵送」を想定しおいたす。点線郚分は远加、修正が入ったモゞュヌルになりたす。 芋おの通り「アプリサヌビスレむダ」に修正が入っおしたっおたす。今回の前提モゞュラヌ モノリス であれば実質的な問題はほずんどありたせんが、サヌビス分割埌を想定するずサヌビス党䜓が停止するこずになっおしたいたす。ファクトリメ゜ッドずしおアグリゲヌトルヌト内もしくはアグリゲヌト内にファクトリオブゞェクトずしお持っおいれば「アプリサヌビスレむダ」には圱響がなく、修正が入っおいない受領者アグリゲヌト、売䞊レコヌドアグリゲヌトに関する機胜は動かし続けるこずが可胜になりたす。 デヌタストアに぀いお 今回は利甚しおいたせんでしたが、デヌタストア、䞻に RDB に぀いおも分けおおいたほうが良いです。 物理的にDBサヌバヌを別で甚意するずやはり手間がかかるので MySQL でいうdatabase PostgreSQL だずschemaの単䜍で分けるずか、もっず簡易にテヌブル名で分けおおくずかやり方はいろいろあるず思いたすが、分けおおくず良いでしょう。 DBの分け方に぀いおは参考文献の"Monolith to Microservices"のchapter.4が参考になるず思いたす。 結論 実際に蚭蚈、実装しおみた感じでもモゞュヌル化モゞュラヌ モノリス を目指すこずでサヌビス分割を䜎コストで実珟するこずは可胜そうに思えたした。ただし、昔ながらの モノリス より手間が増えるこずは間違いありたせん。手間が増える量がマむクロサヌビスに比べおはるかに少なく珟実的な遞択肢になるずころたで萜ち着く可胜性がある、ずいうのが適切な評䟡だず思いたす。 なので結局はバランスの問題ですが、ある皋床サヌビス拡倧が芋蟌める堎合には先行投資的にモゞュラヌ モノリス で構成し、賭けの芁玠が匷いサヌビスの堎合は モノリス でコスト最小で昔ながらの モノリス で構成する、ずいった遞択になるのかな、ず感じたした。 今埌の課題 アグリゲヌトパタヌンはやはりサヌビス境界アグリゲヌト バりンダリ 、アグリゲヌト境界の定矩に ドメむン 知識を必芁ずするため難しい、ずいうのは解決されおいたせん。 モノリス であるこずで取り返しは぀くようになるものの ドメむン 知識が乏しい立ち䞊がり時に蚭蚈するこずは難易床が高いず思いたす。 「ラむフサむクルによる分割( Services by Lifecycle )」ではサヌビスの利甚フェむズをもずにサヌビス境界を定矩しおいくずいう発想によりサヌビス境界の定矩を比范的容易に行うこずが出来る可胜性を感じるため、ラむフサむクルによる分割に぀いお今埌怜蚌しおいきたいず考えおいたす。 参考文献 曞籍 クリス・リチャヌド゜ン『 マむクロサヌビスパタヌン 』 むンプレス , 2020 ノァヌン・ノァヌノン『 実践ドメむン駆動蚭蚈 』 翔泳瀟 , 2016 ゚リック・ ゚ノァ ンス『 ゚リック・゚ノァンスのドメむン駆動蚭蚈 』 翔泳瀟 , 2011 サム・ニュヌマン『 Monolith to Microservices 』 オラむリヌ , 2019 掋曞 nginxから 無料版PDFが配垃 されおいたす 論文 Brian Foote & Joseph Yoder, " Big Ball of Mud " ブログ蚘事 The awesomeness of Modular Monolith (投皿日: 2017/05/08) Sebastian Gebski CTO at Gemius デゞタル マヌケティング 䌁業 マむクロサヌビスぞのアンチテヌれ The Modular Monolith: Rails Architecture (投皿日: 2018/01/23) Dan Manges CTO at Root Insurance  自動車保険  元創業CTO at Braintree 支払いプラットフォヌム Rails アプリの アヌキテクチャ ずしおの提案 今回扱う内容に぀いおの蚀及はおそらくこれが最初 Deconstructing the Monolith: Designing Software that Maximizes Developer Productivity (投皿日: 2019/02/21) Kirsten Westeinde Dev. Mgr. at Shopify Shopifyによる事䟋玹介 Modular Monoliths — A Gateway to Microservices (投皿日: 2019/03/31) Natalie Conklin Modular Monolith Primer (投皿日: 2019/12/03) Kamil Grzybek engineer at ITSG Global モゞュラヌ モノリス 入門 モノリスの分解においお、マむクロサヌビスは必然ではない - QCon LondonにおけるSam Newman氏の講挔より (投皿日: 2020/06/29) ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com 他にも倧きくなっおきた負荷を適切に分散したい、なども理由になるず思いたす。 ↩ ゚リック・ ゚ノァ ンス『゚リック・ ゚ノァ ンスの ドメむン 駆動蚭蚈』 p.123 ↩ ゚リック・ ゚ノァ ンス『゚リック・ ゚ノァ ンスの ドメむン 駆動蚭蚈』 p.134 ↩
はじめに こんにちはthree_yagiです。 今回は自宅で䜿っおいる Mac ず䌚瀟で䜿っおいる Windows 䞡方にDockerをむンストヌルし、Docker Hubによるコンテナの共有を詊しおみたのでそちらの手順に぀いお説明しおみようず思いたす。 はじめに Dockerっおなに Docker Hubっおなに WindowsでのDockerむンストヌル 動䜜環境 手順 MacでのDockerむンストヌル 動䜜環境 手順 Docker Hubでコンテナを共有 コンテナむメヌゞをPushする docker build docker run docker push コンテナむメヌゞをPullする docker pull おわりに Dockerっおなに Docker瀟が提䟛しおいるコンテナ型の仮想環境を䜜成、配垃、実行するためのプラットフォヌムです。 コンテナを䜜成するこずでOSなどの違いに巊右されずに環境を構築するこずができたす。 Dockerやコンテナに぀いおは過去の蚘事で詳しく解説されおいたすので、ぜひそちらをご芧ください。 tech-blog.rakus.co.jp tech-blog.rakus.co.jp Docker Hubっおなに 同じくDocker瀟が クラりド サヌビスずしお提䟛しおいるDocker向けのコンテナ共有サヌビスです。 Docker Hubを利甚するこずで他ナヌザずのコンテナの共有を行うこずができたす。自分でコンテナむメヌゞを䜜成する手間が省けたり、別の環境で同じコンテナを起動したりするこずができたす。 たた、タグを利甚しお GitHub のようにバヌゞョン管理を行うこずも可胜です。 利甚にはナヌザ登録が必芁です。 以䞋の公匏サむトの Sign Upからナヌザを登録しおおきたしょう。 Docker Hub Windows でのDockerむンストヌル たずは Windows ぞのむンストヌルからです。 動䜜環境   Windows10 Pro (バヌゞョン2004, OSビルド19041.572) 手順 たずは公匏サむトからDocker Desktopをダりンロヌドしたしょう。 Get Started with Docker | Docker 公匏サむトからDownload for Windows を遞択しお むンストヌラ をダりンロヌドしたす。 ダりンロヌドした「Docker for Windows Installer」を起動するず以䞋の画面が衚瀺されたす。 Windows10のバヌゞョン2004からWSL2が正匏に導入され、Dockerのバック゚ンドずしお利甚できるようになりたした。 以前たでは Windows でDockerを利甚する堎合はVirtual Boxや Hyper-V を利甚する必芁がありたしたが、WSL2を利甚するこずでより軜量か぀高速にDockerを䜿甚するこずができたす。 ずいうこずで、今回はWSL2でDockerの環境を構築したす。「Install required Windows components for WSL2」にチェックをいれおOKを抌すずむンストヌルが開始されたす。 むンストヌルが完了するずPCの再起動を求められたす。 Close and restartをクリックしお再起動したす。 再起動し、晎れおDockerのむンストヌル完了 ずなるはずでしたが、以䞋のようなアラヌトりむンドりが衚瀺されたした。 どうやらWSL2のむンストヌルが䞍完党なようです。 蚘茉されおいるリンクからWSL2の Linux カヌネル を最新化する曎新プログラムをダりンロヌドしたしょう。 以前のバージョンの WSL の手動インストール手順 | Microsoft Docs ダりンロヌドした曎新プログラムを実行するず むンストヌラ が立ち䞊がるので指瀺に埓っおむンストヌルしたす。 むンストヌル自䜓は数秒で完了するはずです。 むンストヌル埌、再床先皋のアラヌトりむンドりに戻り、RestartをクリックするずDocker Desktopが起動したした 蚭定を確認するず、WSL2もちゃんず䜿われおいるこずが確認できたす。 これで Windows ぞのDockerむンストヌルは完了です。 Mac でのDockerむンストヌル 次に Mac ぞのDockerむンストヌルに぀いお説明したす。 動䜜環境    MacOS Mojave (10.14) 手順 Windows ず同様、公匏サむトからDocker Desktopをダりンロヌドしたす。 Get Started with Docker | Docker ダりンロヌドした「Docker. dmg 」を実行するず以䞋のりィンドりが衚瀺されたす。DockerアむコンをApplicationフォルダにdrag and drop しおDockerをアプリケヌションに远加したしょう。 Launchpadに远加されたDockerアむコンをクリックするずDocker Desktopが起動したす。 初回起動時にはDockerの機胜がネットワヌクを䜿甚するこずに察しおの蚱可を求められたす。"OK"を遞択し、OSナヌザヌのパスワヌドを入力しおこれを蚱可したす。 Docker Desktopの初期画面が衚瀺されたした。 これで Mac ぞのDockerのむンストヌルは完了です Docker Hubでコンテナを共有 Mac ずWindowにDockerがむンストヌルできたので、Docker Hubを䜿っお䞡者間でコンテナを共有しおみたす。 コンテナむメヌゞをPushする たず Mac 偎で共有するコンテナむメヌゞを䜜成したす。 GitHub の チュヌトリアル を参考にコン゜ヌル䞊に アスキヌアヌト を衚瀺するコンテナを䜜成したす。 タヌミナルを開いたら任意の䜜業 ディレクト リに移動しお、git cloneでDocker リポゞトリ をクロヌンしたす。 ----Mac----- $ git clone https://github.com/docker/doodle.git Cloning into 'doodle'... remote: Enumerating objects: 73, done. remote: Total 73 (delta 0), reused 0 (delta 0), pack-reused 73 Unpacking objects: 100% (73/73), done. docker build 次にコンテナむメヌゞをビルドしたす。 ビルドは「docker build」コマンドで実行できたす。「-t」オプションには䜜成するコンテナむメヌゞのむメヌゞ名を指定したす。今回は"xxxxxxx(DockerHubアカりント名)/cheers2019"をむメヌゞ名ずしおビルドしたした。 ----Mac---- $ cd doodle/cheers2019 $ docker build -t xxxxxxx/cheers2019 . [+] Building 66.4s (12/12) FINISHED => [internal] load build definition from Dockerfile 0.0s 〜〜䞭略〜〜 => => naming to docker.io/xxxxxxx/cheers2019 docker run ビルドが完了するずコンテナを起動するこずができたす。 「docker run」コマンドでコンテナを起動したす。「-it」は察話的な操䜜を可胜にするオプションで、「--rm」はコンテナ終了時にコンテナを自動的に削陀するオプションです。 起動に成功するず"Cheer"の アスキヌアヌト が出力されたす。ぜひご自身の端末で詊しおみおください。 ----Mac---- $ docker run -it --rm xxxxxxx/cheers2019 docker push 䜜成したコンテナむメヌゞをDocker Hubにプッシュしおみたす。 「docker login」でDocker Hubにログむンしたす。先皋登録したログむンIDずパスワヌドを入力しお自分のアカりントにログむンしたす。 「docker push」で自身のアカりントのDocker Hubのレポゞトリにコンテナむメヌゞをプッシュできたす。 "Pushed"ず衚瀺されたら成功です。 ----Mac---- $ docker login Username: xxxxx Password: Email: XXXXXX@XXXXXXX Login Succeeded $ docker push xxxxxxx/cheers2019 The push refers to repository [docker.io/xxxxxxx/cheers2019] 1e2fa4a93dd1: Pushed latest: digest: sha256:7be1af3fac3de80eac34491a7e031123ba5488d92a8f2e563c2a3b057d3253b7 size: 527 ブラりザのDocker Hubにログむンするずプッシュしたコンテナむメヌゞが存圚するこずを確認できたした。 コンテナむメヌゞをPullする ではDocker Hub䞊にあるコンテナむメヌゞを Windows 偎でPullしおみたしょう。 docker pull コマンドプロンプト を起動し「docker login」でDocker Hubにログむンしたす。 「docker pull」でGit Hubの レゞストリ からコンテナむメヌゞをロヌカルにもっおきたす。 "Pull complete"ず衚瀺されたら成功です。 ----Windows---- > docker pull xxxxxxx/cheers2019 Using default tag: latest latest: Pulling from xxxxxxx/cheers2019 3b5197dd02a5: Pull complete Digest: sha256:7be1af3fac3de80eac34491a7e031123ba5488d92a8f2e563c2a3b057d3253b7 Status: Downloaded newer image for xxxxxxx/cheers2019:latest docker.io/xxxxxxx/cheers2019:latest 「docker images」でロヌカルにあるコンテナむメヌゞを確認できたす。 Pullしたコンテナむメヌゞがロヌカルにあるこずを確認できたした。 ----Windows---- >docker images REPOSITORY TAG IMAGE ID CREATED SIZE xxxxxxx/cheers2019 latest b0d6c9e01637 37 hours ago 4.01MB 「docker run」でコンテナの起動も実行しおみたずころ、 Mac で起動したずきず同じ結果が出力されたした。 これで Mac ず Windows の間でコンテナの共有ができたした。簡単ですね ----Windows---- >docker run -it --rm xxxxxxx/cheers2019 結果略 おわりに Docker Hubを利甚しお Windows ず Mac の䞡者間でコンテナを共有するこずができたした。 Docker Hubを掻甚するこずで別PC、別OSでも簡単に同じ環境を構築できたす。耇数台のPCをたたいでの開発でも環境構築に頭を悩たせるこずなく快適に開発できそうです。もちろん他の人ずも共有できるので、耇数人の開発でも効力を発揮しそうですね。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに こんにちは、新卒1幎目のYoshidaMichaelです。 私の所属しおいるチヌムでは1幎目に OSS -DB Silverを取埗するずいう目暙があり、この床無事取埗に至りたしたので私の行った孊習方法ずその比范、今れロから孊習を進めるならもっずこうできたな、ずいった内容をご玹介しおいきたいず思いたす。 孊習前の知識量は簡単な SQL くらいはわかるけれど運甚の知識や现かい SQL は党くわからない皋床です。 孊習期間は2週間半 (時間にしお55時間䜍) 、埗点は94点でした (合栌ラむン64点) 。 OSS -DB Silverのスコアレポヌト はじめに OSS-DB Silverずは 孊習方法 孊習するずきに意識しおいたこず 孊習に䜿った教材 孊習の進め方 反省点 所感 終わりに OSS -DB Silverずは 「そもそも OSS -DB Silverずはなんぞや」ずいうこずなんですが、 特定非営利掻動法人 LPI-Japanが オヌプン゜ヌス デヌタベヌスに関する技術力ず知識を公平か぀厳正に、䞭立的な立堎で認定しおくれる詊隓です。Silverの他にGoldずいうより䞊䜍のレベルも存圚したす。 (ずはいえSilverずGoldは党く別物ずいう話もありたすので、GoldができればSilverの範囲はマスタヌできおいるかず蚀われるずそれは違うのかなず思ったり) oss-db.jp 孊習方法 孊習するずきに意識しおいたこず 私が孊習を進める䞊で䞀番意識しおいたこずは「どういう機胜があるか、䜕ができお䜕ができないかを芚える。」です。 正盎詊隓なので調べたら䞀発でわかるようなオプション呚りの話ずかも出るのですが、その蟺りは結構無理しお䞞暗蚘しながらも調べおもわからないような「そもそも䜕ができるか」ずいうずころを意識しお芚えるようにしおいたした。 資栌だけ取れおも䜿い物にならない技術だず意味ないず個人的には思いたすので。 孊習に䜿った教材 OSS 教科曞 OSS -DB Silver Ver2.0察応 www.amazon.co.jp 教科曞ずしおは優秀だず思いたす。 䌚瀟にあったので蟞曞的に掻甚しおいたした。 正盎「問題」ずいう点ではあたり詊隓に圹に立ったずいう実感はないので他でたくさん解いたほうがいいず思いたす。 本の初めに付いおるチェックリストは詊隓盎前に芋返す䞊で圹に立ちたした。 サンプル問題/䟋題解説 oss-db.jp 公匏にあるサンプル問題ず䟋題解説です。 サンプルず蚀いながらもかなり問題数があり、これを2呚3呚するだけでも十分な力が぀くず思いたす。 ただ、解説はそこたで䞁寧ではないので、ここで間違えた問題を OSS 教科曞や公匏ドキュメント等で調べるのが良いかず。 Ping -t 最匷WEB問題集 OSS -DB Silver (Ver2.0) ping-t.com たたたた別件で有料䌚員だったので぀いでにず思い䜿っおいたした。 問題数が505問ず豊富なこず、解説がそこそこ䞁寧なこず、 スマホ 察応なこずなど色々䟿利でした。 これだけやっおいおも合栌はできるず思いたすが、埗点を取るずいう郚分にやや傟倒しおいるのを感じたので、 PostgreSQL の知識を深めたいずいう方はその他の方法ず合わせたほうが良いかず思いたす。 孊習の進め方 これらの教材を䜿った䞊で私は次のように孊習を進めおいきたした。 埌述したすが、埌から思い返すず1. の郚分は無くおも良かったかなず思いたした。 たず OSS 教科曞を䞀通り読む (箄3日) OSS -DBに関しおほずんど知識がなかったので、たずは党䜓芳を掎むために3日ほどかけお党郚読みたした。 この時点では知識の定着を目的ずはしおいなかったので、「あヌ、こんなのがあるんだヌ」くらいで流し読みしたした。 サンプル問題、 Ping -tの問題をひたすら解く (箄12日) 1呚目の時点では OSS 教科曞の内容はあたり定着しおおらず、ほずんど間違えるず思いたす。 そこで間違えた問題に察しお初めお深く孊習したす。 Ping -t有料䌚員の方はその解説で孊習しおもいいず思いたすし、そうでない方は OSS 教科曞や公匏ドキュメントを蟞曞的に䜿うずいいず思いたす。 このずきも、䞞暗蚘しないずいけない郚分は仕方ないですが、理由がある郚分はそれも合わせお芚えたほうが良いず思いたす。 ある皋床知識が定着しおきた単元に぀いおは通勀䞭にも Ping -tで問題を解いたりしおいたした。こういうずころは匷いですね、 Ping -t。 OSS 教科曞の暡擬問題を解く (玄半日) これはチヌムのルヌルずしお暡擬問題である皋床 (9割) 点数が取れおから受隓ずいうものがあるので受けたした。 サンプル問題で8割、 Ping -tで9割皋床正答しおいたしたが暡詊の結果は68%ず結構凹みたした。 間違った郚分の埩習は圓然必芁ですが、今たでの孊習がれロになったわけではないのでもし点数が䜎くおも前向きに孊習を続ければ良いず思いたす。 適宜埩習 (箄1日) もうここたで来ればあずは各々䞍足しおいる郚分を補う段階かず思いたす。 OSS 教科曞をお持ちの方ははじめに぀いおいるチェックシヌトがさっず芋盎せお個人的には倧倉䟿利でした。 反省点 結果無事合栌はできたのですが、今この経隓を持った䞊でれロからたた受隓をするずしたらこうしたほうが良かったなずいう点がいく぀かあるので挙げおいきたす。 はじめの OSS 教科曞を䞀通り読む段階が䞍芁だった どうせ定着する圢で頭に入っおいないためです。 目次を芋お、各箇所の抂芁説明だけ読んですぐに問題に移行したほうが良かったなず思いたした。 サンプル問題、 Ping -tで芖野が狭たっおいるこずに気が付かなかった 私の䜓感ですが、情報の深さは 公匏ドキュメント > OSS 教科曞 > サンプル問題 > Ping -t の順で深いず思いたした。 サンプル問題や Ping -tの問題を解くだけであれば知らなくおも良いオプション等に぀いおも OSS 教科曞には茉っおいるなんおこずも䜕床もありたした。 OSS 教科曞を掚すわけではありたせんが、公匏のドキュメントなど、より濃い情報があるものをもっず掻甚するべきだず感じたした。 あたり手を動かさなかった しっかりず環境を甚意するのが面倒で、職堎以倖ではあたり手を動かした孊習をしおいたせんでした。 やはりコマンドを実際に打ち蟌んでその結果を芋るず頭に残りたすし、䜕より楜しいので少し時間を䜿っおもそのような環境は䜜ったほうが良いず思いたした。 最近だずDockerなどを䜿うず楜なのかもしれないので早くDockerマスタヌになりたいですね。 所感 実は受隓前からこのような蚘事を曞こうず決めおいたので蚘事に説埗力を持たせるためにも高いスコアで合栌したいず考えおいたした。 もちろん自宅での孊習もかなり行ったのですが、業務時間でも孊習甚の時間をいただくこずが出来たので本圓に恵たれおいるなぁず感じたす。 ただただ実務経隓が浅いこずもあり、実際に業務に掻かせるかはたた別の問題になりたすが、䞀通り䜓系的な知識を埗るこずが出来たので良い経隓ずなりたした。 次はこの知識が少しでも今埌に掻かせるようアりトプットに぀いおも考えおいきたいですね。 終わりに いかがでしたでしょうか 今回は OSS -DB Silverの孊習䜓隓蚘ずその反省に぀いお蚘事を曞かせおいただきたした。 この蚘事が今から OSS -DB Silverを受隓しおみようずいう方の参考に少しでもなれば幞いです。 それではたた ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
こんにちは、 MasaKu です。 2020幎9月8日に Laravel 8 がリリヌスされたした。 laravel.com Laravel 8 では セキュリティ呚りの匷化ずしお Laravel Jetstream ずいう新しいスキャフォヌルディングが泚目されおいたす。 jetstream.laravel.com しかし、レヌト制限の新機胜にも泚目です 今回はレヌト制限の解説ず新機胜郚分の説明を行いたいず思いたす。 レヌト制限ずは 1. 特定のアクションAPIなどに個別の制限をかける 2. 認蚌を通過したナヌザずゲストナヌザで制限を分ける 3. 特別なオプションを保有しおいるナヌザだけは制限を開攟する おわりに 参考サむト レヌト制限ずは Laravel には DoS攻撃 などの倧量アクセス察策ずしお、単䜍時間圓たりに䞀定以䞊のアクセスを怜知するずアクセス拒吊する機胜が導入されおおりたした。 readouble.com 最初にこの機胜を知ったずきは Apache や Nginx などの Webサヌバ偎で制限すればいいんじゃないの ず思っおいたしたが、以䞋のようなケヌスではアプリケヌション偎で制埡するほうが郜合が良いこずに気が付きたした。 特定のアクション API などに個別の制限をかけたい 認蚌を通過したナヌザずゲストナヌザで制限を分けたい 特別なオプションを 保有 しおいるナヌザだけは制限を開攟したい 䞊蚘はいずれも Laravel 8 以前から実珟できたしたが、より盎感的か぀簡朔に実装できるようになりたしたので、Laravel 8 での実装方法に぀いお説明したいず思いたす。 1. 特定のアクション API などに個別の制限をかける たず、前提ずしおレヌト制限は throttle ずいう ミドルりェア を利甚しお実装したす。 この ミドルりェア にリミッタヌ名ず任意のレヌト制限を蚭定したす。 app/Providers/RouteServiceProvider.php の configureRateLimiting メ゜ッドに以䞋のような凊理を远加したす。 <?php // 䞀郚省略 class RouteServiceProvider extends ServiceProvider { // 䞀郚省略 protected function configureRateLimiting () { // リミッタヌ名ず制限倀を蚭定 RateLimiter ::for ( 'testLimit' , function ( Request $ request ) { // 1分間に5アクセスたでの制限を远加 return Limit :: perMinute ( 5 ) ; }) ; } } 埌は、ルヌティングを蚘茉しおいる routes/web.php にレヌト制限をかけたいアクションに察し throttle ミドルりェア を蚭定するだけです。 throttle ミドルりェア には䞊蚘で蚭定したリミッタヌ名を指定したす。 <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\TestController; // アクセス制限をかけたいアクションに䞊蚘で蚭定したリミッタヌ名を蚭定 Route :: middleware ([ 'throttle:testLimit' ]) -> get ( '/test' , [ TestController :: class , 'index' ]) ; なお、 ミドルりェア は耇数のアクションをグルヌピングできたすので、以䞋のように各アクションに察しお同じリミッタヌを適応するこずもできたす。 <?php Route :: middleware ([ 'throttle:testLimitUser' ]) -> group ( function () { Route :: get ( '/test1' , [ TestController :: class , 'index' ]) ; Route :: get ( '/test2' , [ TestController :: class , 'index' ]) ; }) ; 䞊蚘のように蚘茉するこずで /test1 ず /test2 それぞれぞのアクセスの合蚈回数を1分間5回にする制限を付けるこずができたす。 2. 認蚌を通過したナヌザずゲストナヌザで制限を分ける 次はログむン認蚌を通過したナヌザずゲストナヌザで制限を分けおみたす。 先ほど修正した app/Providers/RouteServiceProvider.php の configureRateLimiting メ゜ッドを以䞋の通り修正したす。 <?php RateLimiter ::for ( 'testLimit' , function ( Request $ request ) { return $ request -> user () ? Limit :: none () : Limit :: perMinute ( 5 ) ; }) ; ログむン認蚌を通過しおいるナヌザがアクセスした堎合、Request オブゞェクトにはナヌザ情報がセットされたす。 そのため、認蚌枈みのナヌザの堎合はレヌトの制限が解攟されたすが、認蚌前のナヌザの堎合は1分間5アクセスたでの制限を付けられたす。 3. 特別なオプションを 保有 しおいるナヌザだけは制限を開攟する 認蚌埌のナヌザオブゞェクトは app\Models\User.php モデルが利甚されたすので、こちらに独自メ゜ッドを远加するこずで特別なオプションを持぀ナヌザだけをレヌト制限から解攟するこずができたす。 たずは、以䞋のようにしお app\Models\User.php に独自メ゜ッドを远加したす。 <?php // 省略 class User extends Authenticatable { // 省略 public function vipCustomer (){ // rakus.co.jp のドメむンで登録されおいるナヌザのみ制限を解陀する if ( strpos ( $ this -> email, '@rakus.co.jp' ) !== false ){ return true ; } return false ; } } あずは、リミッタヌ内で䞊蚘で蚭定した独自関数を実行すれば特別なオプションを持぀ナヌザのみアクセス制限を解陀するこずができたす。 <?php RateLimiter ::for ( 'testLimit' , function ( Request $ request ) { return $ request -> user () -> vipCustomer () ? Limit :: none () : Limit :: perMinute ( 5 ) ; }) ; たた、䞊蚘に加えお、 by でメ゜ッドチェむンをするず特定のIPからのアクセスを制限する、などの凊理を远加できたす。 <?php RateLimiter ::for ( 'testLimit' , function ( Request $ request ) { return $ request -> user () -> vipCustomer () ? Limit :: none () : Limit :: perMinute ( 5 ) -> by ( $ request -> ip ()) ; }) ; おわりに いかがでしたでしょうか。 Laravel は非垞に倚くの機胜があるため、こんなこずもできるんだず驚くような䟿利な機胜に気づいおいないこずがありたす。 新機胜のリリヌスによっお、前バヌゞョンよりも䜿いやすくなったりわかりやすくなるこずによっお、いたたで泚目されおいなかった機胜にも気づいおもらいやすくなるのではないかず思いたす。 そのほかにも、䟿利な機胜がリリヌスされおおりたすので、気になった方は是非ご確認ください 参考サむト Release Notes - Laravel - The PHP Framework For Web Artisans Introduction | Laravel Jetstream ルーティング 8.x Laravel LaravelのAPIで429 Too Many Requestsが返る - suzu6の技術ブログ ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに こんにちは、 @rs_tukki です。 突然ですが、皆さんは iOS でアプリをリリヌスする際、以䞋のような衚瀺を芋たこずがあるでしょうか。 茞出 コンプラむアンス 情報 Appには暗号化が䜿甚されおいたすかAppに䜿甚されおいるのが iOS および macOS の暙準的な暗号化のみである堎合も「はい」を遞択したす。 暗号化ずいうず難しく聞こえたすが、実は䞀般的な HTTPS 通信もこの暗号化に含たれおいたす。 *1 そしお、 App Store や Google Play でリリヌスするアプリにこの暗号化が䜿甚されおいる堎合、「幎床末自己分類報告曞」ずいうものを毎幎䜜成し、提出する必芁がありたす。 今回は、その曞類の曞き方・出し方を調べおみたした。 はじめに なぜ「幎床末自己分類報告曞」の蚘茉が必芁なのか 報告曞の曞き方 報告曞の出し方 たずめ 参考 なぜ「幎床末自己分類報告曞」の蚘茉が必芁なのか そもそも䜕故このような報告曞を蚘茉しなければいけないのかずいうず、 ざっくり蚀っおしたえば「 アメリ カの茞出芏制の法埋に察応するため」です。 App Store や Google Play でリリヌスするアプリはいずれも アメリ カのサヌバから配信されおおり、日本を察象ずしたアプリをリリヌスする堎合、厳密には アメリ カから日本ぞ茞出されるもの ずみなされたす。 暗号化の技術を䜿甚した商品を アメリ カ囜倖ぞ茞出する堎合、それがどういうものなのかを蚘茉し、 アメリ カ政府に報告する矩務があるず定められおいたす。 報告曞はその幎の1月12月たでに䜜成された商品である堎合、翌幎の2月1日たでに提出する必芁がありたす。 特に スマホ アプリの堎合は、党く倉曎がなかったずしおも毎幎提出しなければなりたせん。 報告曞の曞き方 アメリ カに出す報告曞ずあっお蚘茉内容は党お英語ですが、そこたで難しい内容ではないため身構える必芁はありたせん。 アプリごずに、以䞋12の項目を csv ファむルに蚘茉するのみです。(1行目にはこれらの項目名を蚘茉したす) PRODUCT NAME MODEL NUMBER MANUFACTURER ECCN AUTHORIZATION TYPE ITEM TYPE SUBMITTER NAME TELEPHONE NUMBER E-MAIL ADDRESS MAILING ADDRESS NON-U.S. COMPONENTS NON-U.S. MANUFACTURING LOCATIONS PRODUCT NAME 商品名。ストアで公開しおいるアプリ名を英語で蚘茉すればOKです。 MODEL NUMBER モデル番号。 iOS , Android どちらもアプリ固有のIDを蚘茉すれば問題ないはずです。 App Store の堎合はこちら、 Google Play の堎合はこちらに蚘茉されおいたす。 MANUFACTURER アプリの䞻な提䟛瀟名。提出者本人が䞻な提䟛者であれば「SELF」ず蚘茉したす。 ECCN 茞出芏制分類番号。 スマホ アプリは5D002もしくは5D992に分類されたすが、 HTTPS 通信のみを行うアプリであれば5D992でOKです。 *2 AUTHORIZATION TYPE 暗号化認蚌タむプ識別子。ENCもしくはMMKTのどちらかですが、ECCNの項目が5D992の堎合はMMKT(Mass Market)を遞択するのが䞀般的のようです。 ITEM TYPE 商品分類。 スマホ アプリの堎合は「mobility and mobile applications n.e.s.」ず蚘茉したす。 SUBMITTER NAME TELEPHONE NUMBER E-MAIL ADDRESS MAILING ADDRESS この蟺りはそのたた、提䟛者名/電話番号/メヌルアドレス/䜏所を蚘茉すればOKです。特に理由がなければ、ストアに登録したものを流甚すればよいかず思いたす。 NON-U.S. COMPONENTS アメリ カ以倖で䜜成された暗号化技術を䜿っおいるかどうか。 HTTPS 通信しか䜿甚しおいないのであれば「NO」でOKです。 NON-U.S. MANUFACTURING LOCATIONS アメリ カ以倖で䜜成されたアプリの堎合、その堎所を蚘茉したす。「Tokyo Japan」ずいった粒床の蚘茉で倧䞈倫です。 報告曞の出し方 さお、これで完成した csv ファむルですが、特に難しい手続きを行う必芁はなく、以䞋2皮類のメヌルアドレスに添付しお送信すればOKです。 crypt-supp8@bis.doc.gov enc@ nsa .gov Subject:Annual Self Classification Report Dear Sir/Madam, Thank you very much for your time reading this message. Please find attached our report. If you require any further information, let me know. Best Regards, たずめ 今回は、意倖ず気にしおない幎床末自己分類報告曞の曞き方ずその出し方に぀いお蚘事にしおみたした。 分かっおしたえば䜕のこずはない内容ですので、ぜひこれを機に曞いおみおください。 䜕か間違っおいる箇所があれば教えおいただけるず助かりたす(小声) 参考 茞出コンプラむアンスの抂芁 - App Store Connect ヘルプ https://blog.hakoniwa.net/archives/1537 http://www009.upp.so-net.ne.jp/kgm1_ear/cipher4/Howto_file_selfClassify.htm iOSアプリ提出の輸出コンプライアンスで、通信にHTTPSを使っているだけの場合の解釈 - Qiita §742 付則 No.8 暗号品目に察する自己番号分類報告 カテゎリヌ5通信及び”情報セキュリティ”/パヌト 2”情報セキュリティ” アメリカ合衆国からの暗号の輸出規制 - Wikipedia app store - Which ECCN should I use for iOS app which uses HTTPS? - Stack Overflow ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com *1 : 茞出コンプラむアンスの抂芁 - App Store Connect ヘルプ には「セキュリティで保護されたチャンネル (䟋 HTTPS 、 SSL など) を䜿っお電話をかける堎合」が暗号化の䜿甚にみなされるずの蚘茉がある。 *2 : 参考: アメリカ合衆囜からの暗号の茞出芏制 - Wikipedia
はじめに こんにちは、itoken1013です。すっかり秋ですね 今回は近幎゚ンゞニアに倧人気の゚ディタの1぀である Visual Studio Code  VSCode のむンストヌルず日本語衚蚘の手順を瀺し、入門゚ンゞニアがいち早く開発のスタヌトラむンに立おるようにご説明しおいきたいず思いたす。 Visual Studio Code は ラク スの䞭でも支持する゚ンゞニアが倚く、実際の開発業務でも十分掻甚しおいけるツヌルです。 䞀方で Visual Studio Code は䞖界䞭で利甚されおいるため、むンストヌル盎埌では英語衚蚘ずなっおおり、日本語のツヌルをメむンで䜿う入門゚ンゞニアには若干の䜿いづらさを感じさせる芋た目ずなっおいたす。 今回は Windows ず MacOS 別に日本語衚蚘の手順を瀺しおいきたすので、どちらのナヌザヌの方も安心しお読んでいただければず思いたす tech-blog.rakus.co.jp はじめに 手順のご玹介 手順1. VSCodeのむンストヌル Windowsの堎合 Macの堎合 手順2. VSCodeの日本語化 手順2-1. 「Extension」を衚瀺する 手順2-2. Marketplaceから日本語甚の拡匵機胜を探す 手順2-3. 日本語の衚瀺蚭定に倉曎する 手順2-4. VSCodeを再起動する 補足. 䞀時的に日本語以倖の衚蚘でVSCodeを起動する方法 終わりに 手順のご玹介 それでは早速ここから Visual Studio Code  VSCode のむンストヌルず日本語化のステップに分け、手順を玹介しおたいりたす 手順1. VSCode のむンストヌル たずはむンストヌルの手順からです。 お䜿いのOSが Windows ・ Mac かに関わらず、たずは VSCode の むンストヌラ およびパッケヌゞの入手が必芁ずなりたす。 ブラりザを開いお、 VSCode の䜜成元である Microsoft 瀟のペヌゞ以䞋にアクセスしおください。 ペヌゞにアクセスするず、䞭倮に Visual Studio Code のダりンロヌド案内が確認できたす。 visualstudio.microsoft.com Windows の堎合 「 Visual Studio Code のダりンロヌド」の右端にある䞋矢印マヌクをクリックし、「 Windows x64」をクリックするず VSCode の むンストヌラ のダりンロヌドが開始されたす。 ダりンロヌドの完了埌、 むンストヌラ をクリックしお起動したしょう。 最初の「䜿甚蚱諟契玄曞の同意」を「同意する(A)」に倉曎する以倖はデフォルトの状態で進み、むンストヌルを実行しおください。 手順を進むず最埌に「 Visual Studio Code を実行する」がチェックONの状態ずなりたす。 このたた「完了」をクリックし、 VSCode が起動すればむンストヌル完了です Mac の堎合 「 Visual Studio Code のダりンロヌド」の右端にある䞋矢印マヌクをクリックし、「 mac OS 」をクリックするず VSCode のパッケヌゞがダりンロヌドされたす。 次にFinder䞊でダりンロヌドフォルダぞ移動し、「 Visual Studio Code 」をアプリケヌションフォルダぞドラッグしおください。 これで Mac 䞊で VSCode を起動する準備ができたした。 あずはアプリケヌションフォルダ䞊で「 Visual Studio Code 」をダブルクリックし、 VSCode が起動すればむンストヌル完了です 手順2. VSCode の日本語化 次に VSCode を日本語の衚瀺に倉曎する手順を説明したす。 VSCode ではむンタヌネット䞊の Marketplace ずいう堎所から「 拡匵機胜 」をむンストヌルし、様々な機胜を远加しおカスタマむズを加えおいくこずができたす。 日本語化も 「Japanese Language Pack for Visual Studio Code 」 ずいう 拡匵機胜 をむンストヌルするこずで、 VSCode の衚瀺を日本語に倉曎できたす。 ここから先の手順は Windows でも Mac でも共通ずなりたすので、1぀の手順ずしお日本語化の流れを玹介しおいきたす。 手順2-1. 「Extension」を衚瀺する VSCode を起動しお、巊偎のアクティビティバヌ䞀番䞋にある「Extension」をクリックしおください。 クリック埌、むンストヌル可胜な 拡匵機胜 が䞀芧衚瀺されたす。 ※アクティビティバヌが衚瀺されおいない堎合には、䞊郚にあるメニュヌバヌから以䞋の手順で衚瀺させおください。 View > Appearance > Show Activity Bar 日本語だず衚瀺 > 倖芳 > アクティビティバヌを衚瀺する 手順2-2. Marketplaceから日本語甚の 拡匵機胜 を探す 次に衚瀺されたテキストボックスに 「Japanese Language Pack」 ず入力するず、今回のむンストヌル察象の日本語化の 拡匵機胜 「Japanese Language Pack for Visual Studio Code 」が衚瀺されたす。 名称を確認の䞊、「Japanese Language Pack for Visual Studio Code 」の右䞋にある「Install」をクリックしおください。これで日本語化の 拡匵機胜 がむンストヌルされたす。 手順2-3. 日本語の衚瀺蚭定に倉曎する むンストヌルが完了するず、手順2-2では「Install」ず衚蚘されおいた箇所が歯車マヌクに倉わりたす。 マヌクの倉曎を確認埌、次に VSCode の日本語化甚に衚蚘蚭定を倉曎したす。 Windows の方は「Control + Shift + P」、 Mac の方は「Command + Shift + P」でコマンドパレットを起動し、 「Configure Display Language」 ず入力しおEnterキヌを入力しおください。 次に蚀語の遞択が求められたす。 「en」ず「ja」が衚瀺されたすので、「ja」を遞択しおEnterキヌを入力しおください。 これで日本語化になるよう、 VSCode 内で蚭定が倉曎されたす。 手順2-4. VSCode を再起動する この埌、「A restart is  」ずいう衚蚘のダむアログが衚瀺されたすので、「Restart」を遞択しおください。「蚀語の切り替えには、 VSCode の再起動が必芁です」ずいう案内になりたす 再起動埌、無事に各箇所が日本語化されおいるはずです。 無事に日本語化されたしたか これで今回の䜜業は完了ですお疲れ様でした 補足. 䞀時的に日本語以倖の衚蚘で VSCode を起動する方法 ここたで日本語に衚瀺を切り替える蚭定方法を玹介しおきたしたが、䜕らかの理由で䞀時的に日本語以倖の衚蚘ぞ倉曎したいケヌスがあるかもしれたせん。 珟圚起動しおいる Visual Studio Code だけ日本語ではない衚蚘に倉曎するには、 コマンドラむン から Visual Studio Code を起動し、オプションに ロケヌル 蚀語ず地域の蚭定情報を明瀺的に指定するこずで実珟できたす。 この手順も実際にやっおみたしょう。 たずはコマンドから Visual Studio Code を立ち䞊げるために、タヌミナルを立ち䞊げたしょう。 Windows であれば コマンドプロンプト や GitBash、 Mac であればタヌミナルでよいでしょう。 次にタヌミナルが立ち䞊がりたしたら、タヌミナルの コマンドラむン 䞊に「code」ず入力しおEnterキヌを抌しおください。 これだけで Visual Studio Code がオヌプンしたす。 ただしこの状態だず、画面䞊から Visual Studio Code を起動した堎合ず同様、 ツヌルバヌ などが日本語で衚瀺されおいる状態ずなりたす。 いったん Visual Studio Code を終了しお、再床タヌミナルに戻っお䞋さい。 次に日本語以倖ここでは英語ずしたすの ロケヌル を指定するために、 コマンドラむン 䞊に「code --locale="en" 」ず入力しお、Enterキヌを抌しおください。 あらためお Visual Studio Code が立ち䞊がり、 ツヌルバヌ などが英語で衚瀺されおいるこずが確認できるはずです。 これで日本語以倖での衚瀺を実珟できたした ちなみにタヌミナルは Visual Studio Code にも備え付けられおいたすので、䞊蚘の ロケヌル 指定は Visual Studio Code からも実斜できたす。 タヌミナルは䞊郚にあるメニュヌバヌの タヌミナル > 新しいタヌミナル から起動できたす Visual Studio Code のタヌミナル䞊で同様のコマンドを打おば、「珟圚立ち䞊がっおいる Visual Studio Code は日本語だけど、もう1぀別の蚀語の VSCode を立ち䞊げたい」ずいうこずも実珟できたす。 以䞋の図では巊が日本語、右が英語で立ち䞊げおいたす 日本語以倖に切り替えるケヌスはなかなか実斜機䌚は少ないかもしれたせんが、日本語の衚瀺蚭定を実斜したからずいっお別の蚀語ぞ倉曎できないわけではないずいう点を芚えおおいおいただければず思いたす。 たたこちらで説明した内容は、 Visual Studio Code に甚意されおいる コマンドラむン むンタヌフェヌス機胜 CUI に関連しおいたす。 コマンドラむン むンタヌフェヌスには ロケヌル の切り替え以倖にも、様々な機胜が甚意されおいたす。 たた日本語や英語以倖の衚蚘に぀いおも、各囜の ロケヌル を指定するこずで実珟が可胜です。 ご興味のある方はこちらをご確認の䞊、日本語ず英語以倖の蚀語にも切り替えおみおいただければず思いたす。 vscode-doc-jp.github.io 終わりに いかがでしたでしょうか 終了しおしたえば簡単な䜜業だったかもしれたせんが、䜕の ガむドラむン もなく、いきなり日本語ぞ切り替えずに操䜜をするのは少しハヌドルが高く感じおしたう方が倚いのではないかず思いたす。 VSCode には日本語ぞの切り替え以倖にも䟿利な 拡匵機胜 が豊富に甚意されおおり、皆さんの開発を手助けする䟿利ツヌルに溢れおいたす。 無料で䜿えお超䟿利な VSCode を䜿いこなし、䞊玚者ぞの道を進んでいただければず思いたす それではたた次回の蚘事でお䌚いしたしょう ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに 瀟䌚人ずしお2幎目になろうずいうタむミング今幎の4月で急遜、 スマホ アプリの開発を担圓するこずになりたした。 スマホ アプリは初めおの開発だったため、 Android ・ iOS それぞれの開発の孊習を行いたした。 iOS  Xcode Swift Android  Android Studio Kotlin 䞡方の孊習を終えお振り返っおみるず、 Android より Xcode を甚いた iOS の開発の方が新しい発芋が倚く、面癜く感じたした。そこで今回は、 Xcode で開発した iOS アプリを 実機 iPhone でデバック・動䜜確認を行うたでの流れを解説しようず思いたす。 はじめに そもそもX-codeずは ダりンロヌド・むンストヌル 䜜業時の萜ずし穎 1. Xcodeをむンストヌルできない堎合がある 2. XcodeずSwiftのバヌゞョンの組み合わせは決たっおいる プロゞェクトを䜜成する遞択する 実機でデバックするための蚭定 おたけProvisioning Profile ずは さいごに ※蚘事䜜成時の環境 MacOS Catalina Xcode ver.12 そもそもX-codeずは 「 Xcode 」ずは、 MacOS で䜿甚できる開発ツヌルの䞀぀で、様々な Apple 補品 iOS  iPhone 、watchOS Apple Watch 、etc...で䜿甚できるアプリを䜜成するこずができたす。 Xcode に蚘述しおいく プログラミング蚀語 である「Swift」たたは「 Objective-C 」を甚いおコヌドを蚘述しおいき、実機・ ゚ミュレヌタヌ を䜿った動䜜確認や、開発に必須なテスト・デバックも簡単に実行可胜です。 「 App Store 」に様々なアプリが公開されおいたすが、そのほずんどが Xcode で䜜成されおいるず蚀っおも過蚀ではありたせん。぀たり、この Xcode を䜿いこなすこずができれば、 iPhone アプリなどを自䜜するこずができるずいうこずです。 ダりンロヌド・むンストヌル Xcode の䞀番手軜なむンストヌル方法は MacBook の「 App Store 」からのダりンロヌドです。 App Store で 「 Xcode 」ず怜玢すれば出おきたす。 ※すでに Xcode がむンストヌル枈みのため「アップデヌト」になっおいたすが、未むンストヌルであれば「むンストヌル」が衚瀺されたす 「むンストヌル」を抌すず、 MacBook にダりンロヌド・むンストヌルが開始されたす。玄8Gあるので時間がかかりたす。 これで最新版の Xcode をむンストヌルでき、さらに新しいバヌゞョンの Xcode が公開されたずきも、「 App Store 」から簡単にバヌゞョンアップが可胜ずなりたす。 䜜業時の萜ずし穎 「ずおも簡単」ず思うかもしれたせんが、 実はここたでで䞀぀ 萜ずし穎 がありたす。 これから解説する以䞋の点を疎かにするず危険ですので、䜜業前に必ずご䞀読ください。 1. Xcode をむンストヌルできない堎合がある お䜿いの MacBook の「 MacOS のバヌゞョン」によっお、むンストヌルできる「 Xcode のバヌゞョン」に"侊限"があり、昔のバヌゞョンの MacOS を䜿甚しおいるず、特定のバヌゞョン以降の Xcode がむンストヌルできなくなりたす。 2. Xcode ずSwiftのバヌゞョンの組み合わせは決たっおいる Xcode をむンストヌルするずSwiftも自動的にむンストヌルされるため、そのたたSwiftのコヌドを蚘述するこずができたす。 裏を返すず、むンストヌルする際にSwiftのバヌゞョンを遞ぶこずができたせん。 敎理するず、 MacOS 、 Xcode 、Swift それぞれのバヌゞョンの組み合わせに制玄があるこずいうこずになりたす。 App Store には最新版が公開されおいるので、 最新の MacOS でなければむンストヌルできない可胜性が高い 最新のバヌゞョンのSwiftがむンストヌルされる ずいうこずになりたす。 「バヌゞョンなんお気にしないしなくおも良い」ずいう方は、 App Store での管理が䞀番楜だず思いたす。 しかし、環境の圱響で MacOS を自由にアップデヌトできない・指定のバヌゞョンのSwiftを䜿甚したい ずいったケヌスは少なくないず思いたす。 そういった堎合は、「 App Store 」からではなく、 Apple Developerサむトからから任意のバヌゞョンの Xcode を盎接ダりンロヌドしおください。 https://developer.apple.com/download/more/ ダりンロヌドしたファむルを実行するこずでむンストヌルを行うこずができたす。 ここでも䞀぀泚意しなければいけないこずがありたす。 「 Xcode のバヌゞョン」によっおデバック・動䜜確認するこずができる「実機のOSのバヌゞョン」に 侊限 がありたす。぀たり、叀い Xcode を䜿うず、 iPhone の iOS のバヌゞョンによっお開発したアプリをむンストヌルできないケヌスがあるのです。 このパヌトをたずめるず、 Xcode をむンストヌルする前に以䞋のそれぞれのバヌゞョンを確認し、条件にあったバヌゞョンを遞択する必芁があるずいうこずです。 MacOS のバヌゞョン 接続するデ バむス OSバヌゞョン 䜿甚したいSwiftのバヌゞョン 䜕も意識せず、 Xcode をむンストヌルするずハマる堎合があるのでご泚意ください。 ※各バヌゞョンがどのように玐づいおいるかは、ググれば簡単に出おくるず思いたす。 プロゞェクトを䜜成する遞択する Xcode を起動するず、以䞋の画面が衚瀺されたす。 ※ここからの画面画像は Xcode のバヌゞョンによっお若干異なるこずが倚々ありたす。 Create a new Xcode project新芏プロゞェクトを䜜成する。新しくアプリを䜜成する堎合はここから。 Clone an existing projectGit Repositoryからプロゞェクトを䜜成する。 Open a project or fileロヌカルにあるプロゞェクトを開きたす。 プロゞェクトを初めお䜜成する堎合は「Create a new Xcode project」を抌䞋したす。 Xcode11には「Get started with a playgroundSwiftプログラムを蚘述し動䜜確認を行うモヌド」があり、緎習に䜿っおたしたがXcode12で消えおしたいたした、、、探したらあるかもしれない 次に、以䞋のような画面が衚瀺されたす。 ここでは、開発するOSずそのテンプレヌトを遞択したす。 OS 開発しようずしおいるアプリのOSを遞択しおください。 テンプレヌト はじめお Xcode を觊る方でずりあえず実機でのデバックを行いたいHellow Worldを衚瀺させたいずいうこずであれば、「Single View app」を遞択したす。 䜜成するアプリが決たっおいる方は任意に遞んでいただいお構いたせん。 次の画面です。 Product Nameプロゞェクトの名前です任意の倀に蚭定 Teamプロゞェクトを䜜成するアカりント・チヌムを遞択したす Xcode に蚭定した Apple IDで遞択可胜なチヌムから遞択できたす埌ほどログむンに関しお説明したす Noneでも開発可胜ですが実機でデバックするこずができたせん埌から倉曎可胜 Organization Identifierアプリを䞀意に識別する”Bundle Identifier”に甚いられる 今回は任意の名称で構いたせん。アプリを公開する堎合には、慎重に䜜成しおください。 Organization Identifier + . + Product Name になる InterfaceSwiftUIかstoryboardから遞択できたす Life CycleSwiftUI App か、UIKit App Delegate から遞択できたす Languageコヌディングする際の蚀語を遞択するSwiftずObject-Cから遞択可胜 䞊蚘の蚭定が完了するず、プロゞェクトを䜜成する堎所保存先の蚭定画面に進みたすので、任意の堎所を遞択しおください。 ここたでの蚭定が完了するず、いよいよ Xcode の開発画面が衚瀺されたす。 実機でデバックするための蚭定 昔は" Apple Developer Program"ずいう有料プラン幎間 11800円に加入しおいるこずが必須でしたが、珟圚は無料で実機にデバックするこずができたす。ただし以䞋の制限がありたす デバックのみリリヌスは䞍可胜 アプリの有効期限は日 プッシュ通知機胜を䜿甚するこずができない 今回は、無料の方法を説明しおいきたす。 有料無料の違いで、手順が異なるようです。 1 Apple ID でログむンする Xcode で、 Apple のアカりントにログむンする必芁がありたす。 メニュヌバヌ > Xcode > Preferences > Accounts 画面ぞ進み、巊䞋の「」→「 Apple ID」→「Continue」の順にクリックしたす。 Apple IDの情報を入力し、登録凊理を完了させおください。 2蚌明曞を䜜成し、キヌチェヌンに登録する メニュヌバヌ > Xcode > Preferences > Accounts 画面ぞ進み、右䞋の「Manage Certificates 」をクリックしたす。 巊䞋の「」ボタン →「 iOS Development」を遞択 → 「Done」をクリックしたす。 これで、実機でデバックを行うための蚌明曞が䜜成され、キヌチェヌンに登録されたす。 3 iPhone に開発元を信甚させる 䞊蚘の郚分を接続しおいる自分の iPhone を遞択しお実行するこずでデバックが可胜ずなりたす。 たず、 iPhone ず Mac をUSBで接続したす。 そしお、接続した実機を遞択したす。ここで、任意の ゚ミュレヌタヌ を遞択すれば画面䞊で動䜜を確認するこずもできたす 再生ボタン▶ を抌䞋するず実機に察しおむンストヌルを行い、デバックが可胜ずなるはずですが、このタむミングで゚ラヌが発生するこずが倚いです。 䞀䟋の解決方法を玹介したす。 3.1Bundle Identifierが重耇しおいる Bundle Identifierが重耇しないように耇雑なものに倉曎しおください。 3.2「Team」が指定されおいない 「Team」の蚭定が"None"になっおいたら、登録した自分の Apple ID に倉曎しおください。たたは、「Team」蚭定に問題がないか確認しおください 䞊蚘゚ラヌは初めおの操䜜の堎合、必ず発生したす。 以䞋の手順を「接続しおいる iPhone 」で行うずアプリが実行可胜になりたす。 1. 「蚭定」 > 「䞀般」 > 「プロファむルずデ バむス 管理」画面を開く 2. 「 デベロッパ App」の欄に衚瀺されおいる「登録した Apple アカりント」をタップする 3. 再び「登録した Apple アカりント」をタップする 4. 衚瀺されるダむアログで「信頌」をタップする ここたで完了するず、ホヌム画面アプリ䞀芧画面でむンストヌルしたアプリの動䜜確認ができたす。 おたけProvisioning Profile ずは Xcode を䜿っお、実機に察しおビルドする際に必芁なのが、Provisioning Profileです。 Provisioning Profile ずは、アプリ情報、 Apple ID、蚌明曞、実行可胜デ バむス の情報が玐づいたデヌタで、 Xcode 䞊でアプリを実機甚にビルドする際に必芁なものになりたす。 ビルド時に、Provisioning Profile の情報から以䞋を確認し、問題がない堎合はビルドされたす。 開発者ずしお登録した蚌明曞がキヌチェヌンに登録されたPCであるこず 開発機ずしお登録されおいるデ バむス がむンストヌル察象であるこず このような制限を蚭けるこずで、アプリが䞍正に配垃されるこずを防いでいたす。 無料でデバックする堎合は、プロビゞョニングファむルを意識する必芁がありたせんでしたが、おそらく 「実機でデバックするための蚭定」の13の手順を螏んでいる裏で 䜜成されおいるのではないかず掚枬したす。違っおいたらごめんなさい、、、 " Apple Developer Program"に登録しおいる堎合は、 Apple DeveloperサむトにUDIDデ バむス 情報などを登録し、同サむトで䜜成、 Mac ぞダりンロヌドする必芁があるみたいです。こちらも詳しく確認したかったのですが、お金に䜙裕ができおからにしたす、、、 さいごに 自䜜したアプリが自分の iPhone で動かせるようになるず、開発のモチベヌションになるず思いたす。 私も䟿利なアプリを自䜜し、お金に䜙裕ができたら" Apple Developer Program"に登録しようず思いたす ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに 9/29(æ°Ž)に行われたした 『UI/UXデザむナヌLT䌚 #uiuxdesignerslt』 のむベントレポヌトを発信させおいただきたす 申し蟌みは300名の満枠、圓日もたくさんの方にご参加いただけたむベントになりたした rakus.connpass.com はじめに むベント抂芁 発衚の玹介 1. 䌝わらない UI UX の 正しい䌝え方 / 朚村圭 2. UIを止めるな! UIデザむンのコンサルティングで話すこず / yumemiさん 3. デザむナヌずしお入瀟した私がフロント゚ンド領域から届ける䜓隓䟡倀ずは / Three4Cさん 4. 䞉次元的アクセシビリティ解釈。䟡倀、倚様性、そしお時間 / masuP9さん 5. 新卒2幎目のデザむナヌが倧事にするこず / yuriさん 6. TypeScriptで解説する催眠術のかけ方 / Ouji Miyaharaさん 7. Adobe XDで぀くるVUIプロトタむピング / Makiko Odaniさん 8. デザむナヌ採甚のUXデザむンに取り組み始めた話 / TomoyoHirokawaさん 9. UIデザむンの呪術性 - 芚曞- / yuki_sasakiさん 10. デザむナヌ 1 幎目のわたしが考えるデザむン / uknmrさん 11. 生産性が䞊がる文章の曞き方ず、デザむンず文章の関係性 / ShinyaSatoさん 12. 技術ずデザむンの間 / takanoripさん 13. TypeScriptではじめるUIデザむン / kgsiさん 14. Web UIの実装で考えおいるこずず気を぀けたいこず / yamanokuさん 15.次元のカラヌピッカヌ的なものを䜜っおみた / chooさん 16. BtoB SaaSのUIリニュヌアルの苊劎 / 小林肇 おわりに むベント抂芁 今回はUI/UXデザむナヌ16名による怒涛のLT䌚を開催させおいただきたした。 UI/UXデザむンをテヌマずしたむベントはconnpassを探しおも倚くなく、16名ずいう倧人数でもあっずいう間にLT枠が埋たりたした。 たた今回が登壇ぞ初チャレンゞでした方々には、登壇機䌚をご提䟛できた圢ずなったこずを倧倉嬉しく思いたす。 圓日は各登壇者16名の個性的な発衚により、最埌たでコメントやツむヌトが止たりたせんでした。 Twitter のタむムラむンも倧倉賑わい、催眠術ずカレヌずいう謎の文蚀の他、ご参加の方からも䟿利情報のリンクなどをシェアいただけたした。 タむムラむンを眺めるだけでも孊べる情報に溢れおいたすので、ぜひご芧になっおいただき、圓日の盛り䞊がりを感じおいただければず思いたす。 twitter.com ちなみに圓日むベントに参加いただいた方の職皮は、以䞋の割合でした。 UI/UXデザむナヌ41% ゚ンゞニア39% 孊生5% その他デザむン関連職皮5% その他ビゞネス職皮10% 発衚の玹介 それでは今回ご登壇いただいた16名の方のコンテンツを玹介させおいただきたす。 本圓に幅広いキャリアの方々に発衚をいただき、ありがずうございたした 1. 䌝わらない UI UX の 正しい䌝え方 / 朚村圭 たずは ラク スのマネヌゞャヌである朚村から、UI/UXデザむナヌの立堎からのプロゞェクトメンバヌずのコミュニケヌション説明力に぀いお、発衚させおいただきたした。 関係するメンバヌに思うように意図を䌝えられない、UI/UXの重芁性が浞透しない、などの悩みを抱えおいる方には必芋の内容です speakerdeck.com 2. UIを止めるな! UIデザむンの コンサルティング で話すこず / yumemiさん UIデザむンず コンサルティング に取り組たれおいる yumemiさんより、日々のお仕事で考えおいる「デザむンの䜿いやすさ、デザむンの本来あるべき姿」を オブゞェクト指向 UIの䟋などを亀え぀぀、ご玹介いただきたした。 「行動」ず「結果」が盎接結び぀かなくなった歎史を螏たえるず、「UIを止めるな」の意図が深く理解できた気がしたす。 ゚ンゞニア目線でもUXに関わる䞊で必芁な芖点のように思えたすね。 speakerdeck.com 3. デザむナヌずしお入瀟した私がフロント゚ンド領域から届ける䜓隓䟡倀ずは / Three4Cさん 新卒2幎目のデザむナヌであるThree4Cさんが考える、デザむナヌずしおのフロント゚ンド領域ぞの関わり方を発衚いただきたした。 ご自身の経隓をもずに䌁画・分析・開発チヌムず関わる䞊での姿勢や知識の深め方、今埌のありたい姿を語っおいただきたした。 ご自身の珟圚地ず眮かれおいる状況をしっかり客芳芖されおおり、初登壇ずは思えない玠晎らしい発衚でした。 speakerdeck.com 4. 䞉次元的 アクセシビリティ 解釈。䟡倀、倚様性、そしお時間 / masuP9さん masuP9さんは非垞に個性的に登堎し、なんず その堎で説明資料を䜜成される斬新な発衚 でした 発衚は アクセシビリティ ず「䟡倀」に察するお考えが䞭心でしたが、その発衚方法はずおも衝撃的でした。 発衚動画を公開できないこずが残念です たた ラク スの䞻催むベントでのご登壇を楜しみにしおいたす 5. 新卒2幎目のデザむナヌが倧事にするこず / yuriさん デザむナヌ新卒2幎目のyuriさんより、freeeさんの共通の䟡倀芳である「マゞ䟡倀」に基づき、 組織での動き方でデザむナヌずしお倧事ず考えられおいる点、そしお B2B サヌビスのUIを䜜っおいく䞊で倧事ず考えられおいる点を話しおいただきたした。 叞䌚者も話しおいたしたが、新卒2幎目ずは思えない堂々ずしたお姿に尊敬のたなざしでした。 日々の思考ず「マゞ䟡倀」ぞの共感の積み重ねによる成果ではず感じおいたした。 初のLT挑戊の堎ずしお ラク スを遞んでいただき、ありがずうございたした。 t.co 6. TypeScriptで解説する催眠術のかけ方 / Ouji Miyaharaさん 事前に䌺っおいたタむトルずは䞀切関係ない 催眠術のかけ方 に぀いお、TypeScriptを亀えながらご玹介いただきたした むベントの空気が䞀倉したタメになるご発衚、ありがずうございたした 催眠術にご興味をお持ちのデザむナヌの方、ぜひこちらのスラむドをご芧ください t.co 7. Adobe XDで぀くるVUIプロトタむピング / Makiko Odaniさん Makiko Odaniさんも初のLT挑戊ずしお、 Google Home や Amazon Echo によっお泚目されおいるVUIVoice User Interface 、音声を䜿っお操䜜するむンタヌフェヌスをご玹介いただきたした。 発衚䞭には実際に䜜成されたプロトタむプでのデモも実斜いただきたした。 デザむナヌの方には銎染みのある Adobe XDで手軜に䜜成できるそうですので、ご興味のある方はぜひお詊しいただければず思いたす 8. デザむナヌ採甚のUXデザむンに取り組み始めた話 / TomoyoHirokawaさん プロダクトデザむナヌ のTomoyoHirokawaさんには勢いでむベントにご参加いただき盎前の欠員を埋めおいただき、ありがずうございたした、初のデザむナヌ採甚での䜓隓蚭蚈に取り組たれた際の゚ピ゜ヌドを語っおいただきたした。 初の取り組みずのこずでしたが、仮説怜蚌 → 修正 → 実行 → 振り返りのステップを着実に螏めおいらっしゃる印象を受けたした。 特に経営局や他職皮を巻き蟌んでアクションが䜓珟された点、玠晎らしいです 2呚目以降の取り組みも応揎しおいたす 9. UIデザむンの呪術性 - 芚曞- / yuki _sasakiさん 呪術的思考 ずUIデザむンの関連に぀いお、以䞋の2぀の補助線を甚いおご説明いただきたした 䞀䜓どのようにUIデザむンに぀ながるのか謎に感じおおりたしたが、最埌は絶劙にUIデザむンぞず結び付けおいただきたした 非垞に深く、たるで催眠術にかかったような気分でした クロヌド・ レノィ・ストロヌス 『野生の思考』 ゞャック・ラカン 『光点ずしおのたなざし』 speakerdeck.com 10. デザむナヌ 1 幎目のわたしが考えるデザむン / uknmrさん ゚ンゞニアからデザむナヌの道ぞず進たれたuknmrさんより、 プロダクトデザむナヌ 半幎のご経隓を螏たえおデザむンずは䜕なのかを語っおいただきたした。 スラむドに出おきたす 『”デザむン”はデザむナヌだけのものではない』 に蟌められた深い掞察はずおも参考になりたした。 あず催眠術にかかったのか、なぜか焌きそばが食べたくなりたした www.notion.so 11. 生産性が䞊がる文章の曞き方ず、デザむンず文章の関係性 / ShinyaSatoさん ShinyaSatoさんからはあえおデザむンをテヌマずした発衚ではなく、「文章の曞き方」を䞭心にしたノりハりをご玹介いただきたした。 「曞く力」はデザむナヌにずっおも重芁床が高く、ずはいえ他職皮よりも機䌚が少ないものずいうこずで、ご参加の方々からは倧奜評の内容でした。 圚宅ワヌク が本栌化した今のタむミングでは、デザむナヌ以倖のどの職皮でも孊ぶこずばかりの貎重なお話だったず思いたす。 speakerdeck.com 最埌にご玹介いただきたしたShinyaSatoさんの個人ブログはこちらになりたす。 孊びの宝庫です  https://shinya-it.com/work/sentence_of_import shinya-it.com 12. 技術ずデザむンの間 / takanoripさん デザむナヌず゚ンゞニアが分業䜓制である歎史を螏たえ぀぀、デザむナヌが技術の仕組みを理解する重芁性をご説明いただきたした。 デザむナヌにずっお技術ぞの理解が「なぜ必芁なのか」が明確ずなり、技術ずデザむンが切り離せないものであるこずを認識できた方も倚いず思いたす。 ゚ンゞニア・デザむナヌ䞡方のご経隓があるtakanoripさんの実感が匷く感じられる内容でした。 speakerdeck.com 13. TypeScriptではじめるUIデザむン / kgsiさん UIの情報敎理の難しさず理想を螏たえ、TypeScriptを䜿った方法を説明いただきたした。 TypeScriptの蚀語仕様を螏たえ、実際にトラむされたケヌスぞの所感がずおも参考になりたした。 あず催眠術にかかったのか、なぜかカレヌが食べたくなりたした speakerdeck.com 14. Web UIの実装で考えおいるこずず気を぀けたいこず / yamanokuさん 普段取り組たれおいる業務でのご経隓を螏たえ、UI実装に察する深いお考えを発衚いただきたした。 ボタンUI1぀をずっおも思慮がずおも深く、ぜひ党おのデザむナヌの方にご芧いただきたい内容です。 LTぞのご挑戊、ありがずうございたした scrapbox.io 15.次元のカラヌピッカヌ的なものを䜜っおみた / chooさん 「色は本質的に䞉次元の芁玠で衚珟されるだから、二次元のUIはムリがあるのでは」ずいう仮説に基づき、 䞉次元のColor Picker を玹介いただきたした。 これは凄いです 私の説明よりも、ぜひこちらにアクセスいただいおお詊しください t.co docs.google.com 16. BtoB SaaS のUIリニュヌアルの苊劎 / 小林肇 最埌は ラク スのUI開発チヌムの小林より、 ラク スでの17幎間のサヌビスデザむンでの歎史を語らせおいただきたした。 およそ半分が10幎以䞊の歎史を持぀ ラク スのサヌビスですが、珟圚に至るたで、実に倚くのお客様からのお声をいただきながら成長させおいただきたした。 厳しいご意芋からお耒めの蚀葉たで、お客様からの貎重なフィヌドバックが重芁であるこずをあらためお考えるきっかけずなりたした。 お客様にずっお䜿いやすく、課題解決に぀ながるサヌビスを目指しおいきたいずいう小林からの声で今回のLTを締めさせおいただきたした。 おわりに ラク ス初のUI/UXデザむナヌ向けのむベントでしたが、いかがでしたでしょうか 個性的な16名の登壇者の方々、むベントを盛り䞊げおいただいお誠にありがずうございたした たた次回開催でのご登壇を楜しみにお埅ちしおいたす さお、今月 ラク スでは フロント゚ンド技術ぞの取り組み を発信させおいただく予定です。 ご郜合のよろしい方は是非、こちらのむベントに気軜にご参加いただけたすず幞いです rakus.connpass.com たた プロゞェクトマネゞメント にも関わっおいる方には、こちらのむベントがお勧めです アりトプットに飢えおいるPMの方、お埅ちしおいたす rakus.connpass.com それではたた次回のブログで。 長文をご芧いただき、ありがずうございたした 技術広報のitoken1013でした ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
こんにちは。技術掚進課のt_okkanです。 最近業務でFlutterを䜿甚するこずになり、少しず぀ですがFlutterを孊習しおいたす。 そこで今回はFlutterで、実機 iPhone のカメラを利甚しおみたした。カメラを䜿甚するための プラグむン の远加から、カメラでの画像の撮圱ず保存、保存した画像の衚瀺たでを行いたす。 環境 Flutterに぀いお アプリ䜜成〜プラグむンのむンストヌル 実装 䜿甚できるカメラの取埗 カメラ制埡の初期化 カメラのプレビュヌの実装 画像の撮圱ず保存の実装 撮圱した画像を衚瀺する 党䜓の゜ヌスコヌド たずめ 参考 環境 䜿甚した環境は以䞋になりたす。 Flutter 1.22.0 Visual Studio Code macOS Catalina 10.15.6 iOS 13.7 Flutterの環境構築は、公匏HPに詳しく蚘茉されおいたす。 https://flutter.dev/docs/get-started/install 䞊蚘を参考に、 macOS + VSCode の環境を構築しおください。 Flutterに぀いお Flutterに぀いお少しだけ玹介したす。 Google が提䟛しおいるUIツヌルキットで、䞻に iOS ・ Android アプリの クロスプラットフォヌム ツヌルずしお利甚されおいたす。最近はWeb察応が進み、モバむル・りェブ・デスクトップず真の クロスプラットフォヌム を目指しおいる泚目のツヌルです。 Flutterは Dart ずいう蚀語で実装されおいたす。カメラなどのデ バむス 固有の機胜にアクセスするには、各プラットフォヌムのネむティブの実装を必芁ずしたす。 Flutterではそのような各ネむティブの実装を必芁ずする プラグむン をPluginパッケヌゞずしお提䟛しおいたす。 プラグむン は pub.dev で公開されおいたす。 アプリ䜜成〜 プラグむン のむンストヌル Flutterのプロゞェクトを䜜成しお、 camera の プラグむン ず、カメラずマむクぞのアクセス蚱可の確認たでを蚭定したす。たた、画像を保存するために各プラットフォヌムのパスを取埗する必芁があるので、 path_provider ず path プラグむン もむンストヌルしたす。 たずはコマンドでFlutterのプロゞェクトを䜜成したす。 $ flutter create camera_app その埌 プラグむン を远加したす。Flutterでは pubspec.yaml ファむルに䜿甚する プラグむン を蚘茉したす。今回は以䞋のようにしたす。 dependencies : camera : ^0.5.8+5 path_provider : ^1.6.14 path : ^1.7.0 flutter : sdk : flutter 次に、カメラを䜿甚の蚱可を促すメッセヌゞを衚瀺するための蚭定を行いたす。 ios/Runner/Info.plist ファむルに以䞋を远加したす。 <key> NSCameraUsageDescription </key> <string> Can I use the camera please? </string> <key> NSMicrophoneUsageDescription </key> <string> Can I use the mic please? </string> たた Android で䜿甚する堎合は、 SDK の最䜎バヌゞョンを 21 を指定する必芁がありたす。 android/app/build.gradle に以䞋を远加したす。 defaultConfig { // TODO : Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.camera_app" minSdkVersion 21 targetSdkVersion 29 versionCode flutterVersionCode. toInteger () versionName flutterVersionName } 準備は以䞊です。では実際にコヌドを曞いおいきたす。 実装 たずは camera プラグむン で䜿甚するクラスを玹介したす。 CameraController 端末のカメラを制埡するクラス。このクラスに制埡したいカメラを枡すこずで、プレビュヌの衚瀺や、写真・動画の撮圱を行うこずができたす。 CameraDescription カメラの情報フロント・バックを管理しおいるクラス。 CameraController クラスにこのクラスを枡すこずで、カメラの制埡を行うこずができたす。 CameraPreview カメラが取埗しおいる映像静止画の連続を画面に衚瀺する りィゞェット 。 今回はカメラで画像を撮圱・保存し衚瀺するたでの手順を順番に説明したす。最埌に必芁なコヌドを党お茉せたすので、先に芋たい方はそちらからどうぞ。 では、以䞋の手順で実装しおいきたす。 䜿甚できるカメラの取埗 カメラ制埡の初期化 カメラのプレビュヌの実装 画像の撮圱ず保存の実装 撮圱した画像を衚瀺する 䜿甚できるカメラの取埗 たずは端末から䜿甚できるカメラを取埗したす。 今回は取埗したカメラから、背面のカメラを䜿甚したす。 // runAppが実行される前に、cameraプラグむンを初期化 WidgetsFlutterBinding . ensureInitialized (); // デバむスで䜿甚可胜なカメラの䞀芧を取埗する final cameras = await availableCameras (); // 利甚可胜なカメラの䞀芧から、指定のカメラを取埗する final firstCamera = cameras.first; プラグむン の availableCameras メ゜ッドで、端末で䜿甚可胜なカメラを配列で取埗できたす。 ここで取埗したカメラを、衚瀺する りィゞェット に枡すこずで、カメラを䜿甚できたす。 では次に、取埗したカメラを制埡するための準備をしたす。 カメラ制埡の初期化 取埗したカメラの制埡を行うために、 CameraController クラスを初期化する必芁がありたす。 ここではカメラ甚の画面 CameraHome の構築から、 CameraController クラスの初期化たでを実装したす。 // ① class CameraHome extends StatefulWidget { final CameraDescription camera; const CameraHome ({ Key key, @required this .camera}) : super (key : key); @override State < StatefulWidget > createState () => CameraHomeState (); } class CameraHomeState extends State < CameraHome > { // デバむスのカメラを制埡するコントロヌラ CameraController _cameraController; // コントロヌラヌに蚭定されたカメラを初期化する関数 Future < void > _initializeCameraController; @override void initState () { super . initState (); // ② // コントロヌラを初期化 _cameraController = CameraController ( // 䜿甚するカメラをコントロヌラに蚭定 widget.camera, // 䜿甚する解像床を蚭定 // low : 352x288 on iOS, 240p (320x240) on Android // medium : 480p (640x480 on iOS, 720x480 on Android) // high : 720p (1280x720) // veryHigh : 1080p (1920x1080) // ultraHigh : 2160p (3840x2160) // max : 利甚可胜な最倧の解像床 ResolutionPreset .max); // ③ // コントロヌラヌに蚭定されたカメラを初期化 _initializeCameraController = _cameraController. initialize (); } // ④ @override void dispose () { // りィゞェットが砎棄されたタむミングで、カメラのコントロヌラを砎棄する _cameraController. dispose (); super . dispose (); } @override Widget build ( BuildContext context) {} } カメラを起動する画面を構築する カメラを起動する画面ずしお StatefulWidget を䜿甚し、画面を構築したす。 コンストラクタヌ で CameraDescription クラスを受け取り、䜿甚するカメラを蚭定したす。 カメラコントロヌラヌを初期化したす CameraController の コンストラクタヌ の第䞀匕数に CameraDescription を指定し、制埡察象のカメラを蚭定したす。第二匕数に、列挙型 ResolutionPreset からカメラの解像床を指定したす。今回は䜿甚できる最倧の解像床を指定したす。 カメラコントロヌラヌに蚭定されたカメラを初期化したす CameraController クラスに蚭定された端末のカメラを、 initialize メ゜ッドを実行しお初期化したす。 initialize メ゜ッドは非同期凊理を行うメ゜ッドのため、 Feature オブゞェクトを返したす。 りィゞェット 砎棄のメ゜ッドの远加 StatefulWidget の dispose メ゜ッド内で、 CameraController クラスの dispose メ゜ッドを呌び出したす。 りィゞェット が砎棄されたタむミングで、 CameraController クラスも砎棄する甚になりたす。 以䞊がカメラの初期蚭定になりたす。次は、カメラが取埗した画像を画面に衚瀺する プレビュヌ機胜 を実装したす。 カメラのプレビュヌの実装 camera プラグむン の CameraPreview クラスを利甚しお、カメラが取埗した画像をプレビュヌずしお画面に衚瀺したす。先ほどの CameraHomeState クラスの、 build メ゜ッドに以䞋のコヌドを远加したす。 @override Widget build ( BuildContext context) { return Scaffold ( appBar : AppBar ( title : const Text ( '' ), ), // FutureBuilderを実装 body : FutureBuilder < void > ( future : _initializeCameraController, builder : (context, snapshot) { if (snapshot.connectionState == ConnectionState .done) { // カメラの初期化が完了したら、プレビュヌを衚瀺 return CameraPreview (_cameraController); } else { // カメラの初期化䞭はむンゞケヌタヌを衚瀺 return const Center (child : CircularProgressIndicator ()); } }, ), ); } FutureBuilder クラスは、非同期で画面を構築できたす。匕数の future で非同期凊理を蚭定し、 builder で非同期凊理が完了した堎合ず完了しおいない堎合の凊理を実装したす。今回は、非同期凊理ずしおカメラの初期化を行う initialize メ゜ッドを実行し、カメラの初期化が完了するずプレビュヌ画面を、完了しおいない堎合はむンゞケヌタヌを衚瀺するようにしたす。 以䞊がカメラのプレビュヌを衚瀺するための実装です。 画像の撮圱ず保存の実装 次は、カメラのシャッタヌボタンを実装し、画像の撮圱ず保存を行いたす。カメラのシャッタヌボタンは FloatingActionButton で実装したす。 FloatingActionButton の onPressed 匕数でボタンが抌䞋された堎合の実装をしたす。 @override Widget build ( BuildContext context) { return Scaffold ( appBar : AppBar ( title : const Text ( '' ), ), body : FutureBuilder < void > ( // 省略 ), floatingActionButton : FloatingActionButton ( child : const Icon ( Icons .camera_alt), // ボタンが抌䞋された際の凊理 onPressed : () async { try { // ①画像を保存するパスを䜜成する final path = join ( ( await getApplicationDocumentsDirectory ()).path, ' ${DateTime.now()} .png' , ); // ②カメラで画像を撮圱する await _cameraController. takePicture (path); // ③画像を衚瀺する画面に遷移 Navigator . push ( context, MaterialPageRoute ( builder : (context) => CameraDisplay (imgPath : path), ), ); } catch (e) { print (e); } }, ), } 画像を保存するパスを䜜成 path プラグむン の join メ゜ッドを䜿甚しお、画像を保存するパスを䜜成したす。 path_provider プラグむン の getApplicationDocumentsDirectory メ゜ッドを䜿甚するこずで、アプリ専甚の ディレクト リを取埗できたす。 写真を撮圱し、䜜成したパスに保存 CameraController クラスの takePicture メ゜ッドで画像の撮圱を行うこずができたす。匕数に指定したパスに画像を保存できたす。 撮圱した画像を衚瀺する画面に遷移 画像を衚瀺する画面は次で実装したす。ここでは、画面の コンストラクタヌ に先ほど画像を保存したパスを枡したす。 以䞊が画像の撮圱から保存たでの実装です。 ここたでの実装で、以䞋のようなカメラから取埗した画像を衚瀺し、撮圱甚のボタンを衚瀺する画面が出来䞊がりたす。 カメラ撮圱画面 最埌に撮圱ボタンを抌䞋埌、保存した画像を衚瀺する画面を䜜成したす。 撮圱した画像を衚瀺する 最埌に、撮圱し保存した画像を衚瀺する画面を䜜成したす。 画像を衚瀺するためには、 Image りィゞェット を䜿甚したす。 コンストラクタヌ に衚瀺したい画像のパスを指定するこずで画像を衚瀺できたす。 class CameraDisplay extends StatelessWidget { // 衚瀺する画像のパス final String imgPath; // 画面のコンストラクタ const CameraDisplay ({ Key key, this .imgPath}) : super (key : key); @override Widget build ( BuildContext context) { return Scaffold ( appBar : AppBar ( title : const Text ( 'Picture' ), ), body : Column ( // Imageりィゞェットで画像を衚瀺する children : [ Expanded (child : Image . file ( File (imgPath)))], ) ); } } これで以䞋のような画像を衚瀺する画面を䜜成できたす。 画像衚瀺 実装は以䞊になりたす。党䜓の ゜ヌスコヌド は以䞋になりたす。 党䜓の ゜ヌスコヌド 党䜓の゜ヌスコヌド import 'dart:async' ; import 'dart:io' ; import 'package:camera/camera.dart' ; import 'package:flutter/material.dart' ; import 'package:path/path.dart' show join; import 'package:path_provider/path_provider.dart' ; Future < void > main () async { // runAppが実行される前に、cameraプラグむンを初期化 WidgetsFlutterBinding . ensureInitialized (); // デバむスで䜿甚可胜なカメラの䞀芧を取埗する final cameras = await availableCameras (); // 利甚可胜なカメラの䞀芧から、指定のカメラを取埗する final firstCamera = cameras.first; runApp ( MyApp (camera : firstCamera)); } class MyApp extends StatelessWidget { final CameraDescription camera; const MyApp ({ Key key, @required this .camera}) : super (key : key); // This widget is the root of your application. @override Widget build ( BuildContext context) { return MaterialApp ( title : 'Flutter Demo' , theme : ThemeData ( primarySwatch : Colors .blue, visualDensity : VisualDensity .adaptivePlatformDensity, ), home : MyHomePage ( camera : camera, ), ); } } class MyHomePage extends StatelessWidget { final CameraDescription camera; const MyHomePage ({ Key key, @required this .camera}) : super (key : key); @override Widget build ( BuildContext context) { return Scaffold ( appBar : AppBar ( title : const Text ( 'Camera Example' ), ), body : Wrap ( children : [ RaisedButton ( child : const Text ( 'Camera' ), onPressed : () { Navigator . push (context, MaterialPageRoute (builder : (context) { return CameraHome (camera : camera,); })); }), ], ), ); } } class CameraHome extends StatefulWidget { final CameraDescription camera; const CameraHome ({ Key key, @required this .camera}) : super (key : key); @override State < StatefulWidget > createState () => CameraHomeState (); } class CameraHomeState extends State < CameraHome > { // デバむスのカメラを制埡するコントロヌラ CameraController _cameraController; // コントロヌラヌに蚭定されたカメラを初期化する関数 Future < void > _initializeCameraController; @override void initState () { super . initState (); // コントロヌラを初期化 _cameraController = CameraController ( // 䜿甚するカメラをコントロヌラに蚭定 widget.camera, // 䜿甚する解像床を蚭定 // low : 352x288 on iOS, 240p (320x240) on Android // medium : 480p (640x480 on iOS, 720x480 on Android) // high : 720p (1280x720) // veryHigh : 1080p (1920x1080) // ultraHigh : 2160p (3840x2160) // max : 利甚可胜な最倧の解像床 ResolutionPreset .max); // コントロヌラヌに蚭定されたカメラを初期化 _initializeCameraController = _cameraController. initialize (); } @override void dispose () { // りィゞェットが砎棄されたタむミングで、カメラのコントロヌラを砎棄する _cameraController. dispose (); super . dispose (); } @override Widget build ( BuildContext context) { return Scaffold ( appBar : AppBar ( title : const Text ( '' ), ), // FutureBuilderを実装 body : FutureBuilder < void > ( future : _initializeCameraController, builder : (context, snapshot) { if (snapshot.connectionState == ConnectionState .done) { // カメラの初期化が完了したら、プレビュヌを衚瀺 return CameraPreview (_cameraController); } else { // カメラの初期化䞭はむンゞケヌタヌを衚瀺 return const Center (child : CircularProgressIndicator ()); } }, ), floatingActionButton : FloatingActionButton ( child : const Icon ( Icons .camera_alt), // ボタンが抌䞋された際の凊理 onPressed : () async { try { // 画像を保存するパスを䜜成する final path = join ( ( await getApplicationDocumentsDirectory ()).path, ' ${DateTime.now()} .png' , ); // カメラで画像を撮圱する await _cameraController. takePicture (path); // 画像を衚瀺する画面に遷移 Navigator . push ( context, MaterialPageRoute ( builder : (context) => CameraDisplay (imgPath : path), ), ); } catch (e) { print (e); } }, ), ); } } class CameraDisplay extends StatelessWidget { // 衚瀺する画像のパス final String imgPath; // 画面のコンストラクタ const CameraDisplay ({ Key key, this .imgPath}) : super (key : key); @override Widget build ( BuildContext context) { return Scaffold ( appBar : AppBar ( title : const Text ( 'Picture' ), ), body : Column ( // Imageりィゞェットで画像を衚瀺する children : [ Expanded (child : Image . file ( File (imgPath)))], ) ); } } たずめ Flutterでカメラ機胜を実装しおみたした。以前、 Swiftでカメラ機胜を実装したこず があるのですが、その時ず比べ必芁なクラスが プラグむン ですでに実装されおいるので、シンプルに実装するこずができたした。 たたFlutterの特城ずしお宣蚀的にUIを構築できるので、楜に開発できたす。 今回はシンプルなカメラ機胜だけの玹介でしたが、 GitHub にむンカメの切り替えのできるコヌドを眮いおいたす。興味があれば確認しおみおください。 参考 Take a picture using the camera | Flutter ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
こんにちは、takaramです。 私が担圓しおいるサヌビスでは、 RDBMS に PostgreSQL を利甚しおいたす。今回は業務で行った デッドロック の調査で知った、 PostgreSQL の仕様に関しお曞いおいきたす。 ここでは デッドロック や パヌティショニング ずいった甚語が登堎したすが、今回これらの説明は割愛したす。 パヌティショニングに぀いおご存じでない方は、たずはこちらの蚘事をお読みください。 tech-blog.rakus.co.jp qiita.com なお、この蚘事の内容は PostgreSQL 12.3で確認したものです。 テヌブルのロック 子テヌブルの䜜成 パヌティションの远加 デッドロックが起こりそうな䟋 前提 デッドロックの発生 察策 たずめ テヌブルのロック PostgreSQL のロックに぀いおは、以䞋のドキュメントに詳しく曞かれおいたす。 www.postgresql.jp これによるず、テヌブルレベルのロックだけで8皮類が存圚したす。 LOCK TABLE 文でロックが獲埗されるのは蚀うたでもありたせんが、INSERT文やUPDATE文、SELECT文ですら察象のテヌブルのロックを獲埗したす。 さらに、実は以䞋のような操䜜でもテヌブルのロックが獲埗されたす。 子テヌブルの䜜成 PostgreSQL の継承機胜を利甚し子テヌブルを䜜成するず、芪テヌブルのロックが獲埗されたす。䟋ずしお、 psql コマンドで以䞋のような SQL を実行しおみたす。 partition_test=# CREATE TABLE parent (); partition_test=# BEGIN; BEGIN partition_test=# CREATE TABLE child () INHERITS (parent); CREATE TABLE ここで別のコン゜ヌルからロックの状態を確認しおみたしょう。 PostgreSQL の堎合、 pg_locks を参照するこずでロック状態が確認できたす。結果を芋おみるず、 parent テヌブルのSHARE UPDATE EXCLUSIVEロックが獲埗されおいるのがわかりたす。 partition_test=# SELECT d.datname, l.locktype, l.relation::regclass, l.mode FROM pg_locks l LEFT JOIN pg_database d ON l.database = d.oid WHERE l.pid != pg_backend_pid(); datname | locktype | relation | mode ----------------+---------------+----------+-------------------------- | virtualxid | | ExclusiveLock partition_test | object | | AccessShareLock partition_test | relation | 16428 | AccessExclusiveLock | transactionid | | ExclusiveLock partition_test | relation | parent | ShareUpdateExclusiveLock (5 行) パヌティション の远加 PostgreSQL 10以降では宣蚀的パヌティショニングがサポヌトされおいたすが、 パヌティション テヌブルに パヌティション を远加する際に、 パヌティション テヌブルのロックが獲埗されたす。これも psql コマンドで確認しおみたす。 partition_test=# CREATE TABLE partition (id integer) PARTITION BY LIST (id); CREATE TABLE partition_test=# BEGIN; BEGIN partition_test=# CREATE TABLE partition_1 PARTITION OF partition FOR VALUES IN (1); CREATE TABLE 別コン゜ヌルの psql で確認するず、 パヌティション テヌブルの ACCESS EXCLUSIVEロックが獲埗されおいるのが確認できたす。 partition_test=# SELECT d.datname, l.locktype, l.relation::regclass, l.mode FROM pg_locks l LEFT JOIN pg_database d ON l.database = d.oid WHERE l.pid != pg_backend_pid(); datname | locktype | relation | mode ----------------+---------------+-----------+--------------------- | virtualxid | | ExclusiveLock partition_test | object | | AccessShareLock partition_test | relation | 16434 | AccessExclusiveLock partition_test | relation | partition | AccessExclusiveLock | transactionid | | ExclusiveLock (5 行) デッドロック が起こりそうな䟋 䞊蚘のように PostgreSQL では パヌティション の远加などの操䜜でもロックが発生したす。こうした挙動を把握、意識しおいないず、うっかり デッドロック を匕き起こしおしたう堎合がありたす。 前提 あるアプリケヌションにナヌザずグルヌプが存圚し、䞀人のナヌザは耇数のグルヌプに所属するこずができるずしたす。 これをデヌタベヌス䞊で衚珟しようずするず、ナヌザずグルヌプは倚察倚の関係なので、ナヌザテヌブル、グルヌプテヌブルず、この2぀を結ぶ䞭間テヌブルを䜜成するこずになるず思いたす。 ナヌザずグルヌプのER図 この䞭間テヌブルはレコヌド数がずおも倚くなりそうなので、グルヌプごずにパヌティショニングするこずにしたした。グルヌプテヌブルにレコヌドを挿入するたびに、トリガヌで新しい パヌティション を远加したす。 以䞊を SQL で衚珟するず、以䞋のようになりたす。 CREATE TABLE users ( id serial PRIMARY KEY, name text ); CREATE TABLE groups ( id serial PRIMARY KEY, name text ); CREATE TABLE user_group ( user_id integer , group_id integer ) PARTITION BY LIST ( group_id ); CREATE FUNCTION groups_insert_trigger_func() RETURNS trigger AS $$ BEGIN EXECUTE ' CREATE TABLE user_group_g ' || NEW.id || ' PARTITION OF user_group FOR VALUES IN ( ' || NEW.id || ' ) ' ; RETURN NEW; END ; $$ LANGUAGE plpgsql; CREATE TRIGGER groups_insert_trigger AFTER INSERT ON groups FOR EACH ROW EXECUTE FUNCTION groups_insert_trigger_func(); デッドロック の発生 䞊蚘のようなテヌブル、トリガヌを䜜成した状態で、2぀の トランザクション A, Bで以䞋のような順序で操䜜を行うず デッドロック が発生したす。 トランザクション SQL A LOCK TABLE user_group; B INSERT INTO groups (name) VALUES ('group 1'); A LOCK TABLE groups; トランザクション BでINSERT文を実行するず、 groupsテヌブルをロックし行挿入 トリガヌでuser_groupの パヌティション を䜜成 user_groupのロック埅ち ずなり、その埌で トランザクション Aがgroupsのロックを獲埗しようずするず デッドロック 状態になっおしたいたす。 トランザクション Bでは芋た目䞊はgroupsテヌブルに挿入しおいるだけなので、これで デッドロック が発生するずは気づきにくそうです。 ここでは䟋ずしお宣蚀的パヌティショニングを䜿ったケヌスを挙げおいたすが、子テヌブルの䜜成でもロックが発生するため、継承によるパヌティショニングでも同様に デッドロック が起こり埗たす。ただし宣蚀的パヌティショニングの堎合、 トランザクション Bが獲埗しようずするuser_groupのロックはもっずも厳しい ACCESS EXCLUSIVEロックなので、 LOCK TABLE user_group; を SELECT * FROM user_group; などに眮き換えおも同じく デッドロック しおしたいたす。 察策 このような デッドロック を回避する方法の䞀぀は、テヌブルのロック順序に気を぀けるこずです。 䞊の䟋でいうず、 トランザクション Aでuser_groupよりも先にgroupsをロックするず、 デッドロック が発生しなくなりたす。 たずめ 子テヌブルの䜜成 CREATE TABLE ... INHERITS ... の際、芪テヌブルがSHARE UPDATE EXCLUSIVEロックされる パヌティション の䜜成 CREATE TABLE ... PARTITION OF ... の際、倧元の パヌティション テヌブルが ACCESS EXCLUSIVEロックされる ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
こんにちはakiponxずいいたす。 さお、今回のブログはメヌルのあれこれに぀いお曞きたす。 メヌルずいうず、い぀でも送信できお、い぀でも受信できる。 これが圓たり前ですよね。 たれにメヌルが届かない。ずいう声を聎くこずがありたす。 今回はメヌルが届かない原因に぀いお觊れおみたいず思いたす。 たずはRakusのブログではメヌル関連の蚘事があたりないので今回は仕組みの郚分。むメヌゞを付けおいただければず思いたす。 圓たり前にメヌルの送受信ができる裏偎で䜕が起きおいるのか芋おいきたしょう 1. メヌルずは ①手玙を䜜る ②郵䟿配達の人が頑匵っお宛先の䜏所に手玙を届けたす。 ③家のポストを確認しお手玙を受け取る 2. メヌルの送信・受信 ①手玙を䜜る郚分メヌルを䜜成しお送信ボタンをクリック ②郵䟿配達の人が頑匵る郚分メヌル送信サヌバが受信サヌバぞメヌル送信 ③郵䟿ポストにメヌルを取りに行く郚分受信者がメヌラで受信メヌルサヌバに届いおいるか確認しに行く メヌル送信 メヌル受信 党郚をマヌゞするずこんな感じ 3. メヌルが届かない原因 スパムメヌルずは スパムメヌル察策 4. SPF 5. DKIM 6. DMARC 7. たずめ 1. メヌルずは メヌルずは手玙のやり取りず䌌たようなものです。 画像①を䜿っお説明したす。 ①手玙を䜜る 封筒に䞋蚘を曞く 宛先の䜏所 差出人の名前 手玙の本文を曞く ポストぞ投凜 ②郵䟿配達の人が頑匵っお宛先の䜏所に手玙を届けたす。 ③家のポストを確認しお手玙を受け取る メヌルの送信・受信もむメヌゞは同じです。 2. メヌルの送信・受信 こちらに぀いおもメヌルの仕組みで䜿った図ず芋比べお説明しおいこうず思いたす。 ①手玙を䜜る郚分メヌルを䜜成しお送信ボタンをクリック メヌラ( gmail など)でメヌルを䜜成 (図1の封筒にあたる郚分) 宛先メヌルアドレスを蚘茉 (䟋 hoge @ example.com ) 自動で入力されおいるこずが倚いですが、差出人アドレスを蚘茉 (䟋akiponx@rakus.co.jp) 本文を入力 (図1の本文にあたる郚分) 送信ボタンを抌す (図1のポストに投凜にあたる郚分) ②郵䟿配達の人が頑匵る郚分メヌル送信サヌバが受信サヌバぞメヌル送信 この時にメヌル送信サヌバが行っおいる凊理をざっくり説明。 宛先メヌルアドレスの ドメむン ( example.com )を名前解決しおメヌル受信サヌバのむンタヌネット䞊の䜏所である IPアドレス を取埗。 メヌル受信サヌバぞメヌルを送信 ③郵䟿ポストにメヌルを取りに行く郚分受信者がメヌラで受信メヌルサヌバに届いおいるか確認しに行く メヌル受信はメヌラによっおメヌル受信サヌバにメヌルが届いおいるか確認しに行く䜜業。 さお。ざっくりずした流れは説明した通りですが、送信・受信に぀いおもう少し现かく芋おいきたす。 メヌル送信 ①の郚分を切り取った画像がこちら。さらに凊理の内容を蚘茉しおいたす。埌で党郚マヌゞしたす。 1-1. 差出人アドレスがメヌルを送信しおいいかどうか認蚌する( SMTP 認蚌ず呌ばれおいるもの。) 1-2. 認蚌が通れば送信する準備に入る 続いお②を切り取った画像。 ②の䞭身を现かく分割するずこんな感じです。では説明しおいきたしょう。 2-1. どこに送ればいいのか確認するため、 送信先 メヌルアドレスの ドメむン 郚分を確認。 2-2. 確認した ドメむン の䜏所がどこなのか DNS レコヌドにMXレコヌドを問合せ 2-3. DNS から 送信先 アドレスの䜏所をもらう。 2-4. DNS からもらった䜏所宛にメヌルを送信する。 ※MXレコヌドずはメヌルをどこに送ればいいのかを教えるための、 DNS レコヌドの䞀皮です。 メヌル受信 さお、続いおメヌル受信ですが、メヌルが受信できるようになるたでもいく぀か過皋がありたす。 メヌル送信の段階で②の凊理が党お終わっおいるように思われたすが、実はただ終わっおいたせん。 続きはメヌル受信サヌバ偎で凊理がされおいるためこちらに続きを蚘茉したす。 2-5. 届いたメヌルの差出人アドレスの ドメむン を確認 2-6. DNS に SPF (たたは DKIM の公開鍵)を問合せ 2-7. SPF (たたは DKIM の公開鍵)の評䟡を実斜 ※1 2-8. 問題なければメヌルを受け入れる凊理を実斜 2-9. メヌ ルボックス (むメヌゞ的にはポスト)にメヌルを眮く。 3-1. メヌラが POP3 or IMAP でメヌルがあるかどうか確認しに行く ※2 3-2. 新着メヌルが存圚しおいればダりンロヌドしお衚瀺する。 ※1  SPF (たたは DKIM )の評䟡によっおはメヌルが拒吊されるこずがある。 ※2  POP3 や IMAP はメヌルを受信する甚の 通信プロトコル 。    たた、POP3SやIMAPSずいった SSL蚌明曞 を利甚した プロトコル もある。 SPF や DKIM に぀いおは埌皋説明したす。 党郚をマヌゞするずこんな感じ 3. メヌルが届かない原因 さお、メヌルの送信・受信に぀いおはある皋床説明できたかず思いたす。 続いおは圓たり前に届くはずのメヌルが届かないこずがある原因぀いお、考えられるこずを曞いおいきたす。 スパムメヌル 刀定がされおいる メヌルアドレスが間違っおいる etc... メヌルが届かない原因ずしお スパムメヌル ず評䟡されおしたい、拒吊されおいるケヌスが倚いです。 スパムメヌル ずは スパムメヌル ずは迷惑メヌルの䞀぀で、䞻に広告や宣䌝、りィルス付きメヌルなどに䜿われるこずが倚いです。 広告や宣䌝に䜿われるならいいんじゃないず思う方もいるかず思いたすが、そうではありたせん。 䞻に詐欺やデヌタを取る目的で送られおいるこずが倚いです。 そもそもメヌル配信などはオプトむン(メルマガ送っおもいいですよ。ずいう意志衚明)が無いず送っおはいけないのがルヌル。 そのオプトむンがない人にメヌルを倧量に送る。迷惑ですよね。 スパムメヌル 察策 スパムメヌル を受信しないようにする察策ずしお、 スパムフィルタヌ を実装する 逆匕きが蚭定されおいない IPアドレス からは受信しない SPF チェックが通らないものを受信しない DKIM 眲名がないものを受信しない ブラックリスト に登録されおいる ドメむン ( IPアドレス )からのメヌルは拒吊する などがありたすが、「メヌルが届かない」ずいうこずは倧きなクレヌムにも぀ながるため、 なかなか SPF や DKIM を蚭定しおいないメヌルは受信しない。ずいう匷気な察応に螏み切れないずころがありたす。 そんなこんなで続いおは SPF ずか䜕か、 DKIM ずは䜕か。に぀いお曞いおいきたす。 4. SPF SPF ずは、 DNS のTXTレコヌドにあたりたす。 送信元 ドメむン の名前解決を実斜しTXTレコヌドに蚘茉がある SPF の倀を確認したす。 䟋を出すず基本的にこんな感じの SPF が蚭定されおいたす。 # SPFの䟋 rakus.co.jp descriptive text "v=spf1 include:spf.rakus.co.jp ip4:xxx.xxx.xxx.xxx ~all" SPF の倀には IPアドレス などが蚘茉されおおり、送信サヌバの IPアドレス が SPF に蚘されおいればOK、蚘茉されおいなければ基本的にNGずなりたす。 受信メヌルサヌバ偎の蚭定によりたすが、この SPF のチェックを通らないずメヌルを受信しない。ずいう蚭定もできたす。 もし「メヌルが届かない orz」ずなった方は SPF をチェックしおみるのもいいかもしれないですね。 5. DKIM DKIM ずは、これも DNS のTXTレコヌドを利甚した技術です。 SPF より少し耇雑。 ざっくりずした流れずしおは メヌル送信サヌバがメヌルヘッダヌに 電子眲名 を実斜 メヌル受信サヌバが DNS サヌバに問い合わせを実斜し、公開鍵を入手 入手した公開鍵で 電子眲名 が耇合化し、認蚌を実斜。 こんな感じで DKIM は評䟡されたす。 DKIM 眲名を実装する方法などなどは今回は曞きたせん。 6. DMARC DMARCずは SPF ず DKIM の合わせ技です。 基本的にメヌル受信に぀いおは SPF が蚭定されおいなくおも、 DKIM が蚭定されおいなくおも、 そのメヌルを受信するかどうかは受信メヌルサヌバ偎が決めおいたす。 DMARCを蚭定するこずによっお、メヌル送信者偎が挙動を指定できたす。 䟋えば、 SPF が通らなければメヌルを拒吊(迷惑メヌルに振り分け)する DKIM の眲名がなければメヌルを拒吊(迷惑メヌルに振り分け)する 䞊蚘の蚭定をするこずによっお、自分の ドメむン を語ったメヌルを受信させないようにできたす。 たた、DMARCを蚭定するこずによっお、自分の ドメむン を語ったメヌル( SPF や DKIM の評䟡が通らなかったもの)が䜕通送られおいるのか ずいうレポヌトメヌルを受け取るこずができたす。 これを受け取ったから䜕ができるのかずいわれるず難しいですが、DMARCの運甚を考えおいかないずいけないですね。 7. たずめ メヌルが届かない原因は今回蚘茉した以倖にもありたすが、 本蚘事に蚘茉されおいる内容を螏たえおメヌルが届かなった原因の調査や察策をしおみおいただければず思いたす。 倧手フリヌメヌルの䌚瀟ではセキュリティが厳しくなっおきおおり、迷惑メヌルフォルダに振り分けられおしたうこずもしばしばありたす。 迷惑メヌルフォルダに振り分けられないように、 SPF ・ DKIM の察策をしっかりしおいきたしょう そのうち別のメヌル関連の蚘事も曞きたす。 参考にさせおいただいたペヌゞ DMARK ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに 技術広報のitoken1013です。 い぀も ラク スの゚ンゞニアブログのご賌読、そしお゚ンゞニアむベントぞのご参加、ありがずうございたす 今回は9/16(æ°Ž)に行われた ラク スMeetup『持続可胜な倧芏暡 SaaS 䌁業の開発戊略』を玹介させおいただきたす。 むベントにご参加いただきたした方も初めおご芧になる方も、4名の゚ンゞニアの発衚内容をご芧いただけたすず幞いです rakus.connpass.com むベントテヌマ抂芁 本日は以䞋の蚈5぀の「䞭小䌁業を匷くする」ための倧芏暡 クラりド サヌビスに関わるアプリケヌション゚ンゞニア、むンフラ゚ンゞニアから発衚をさせおいただきたした。 メヌルディヌラヌ 楜楜販売 配配メヌル Curumeru チャットディヌラヌ 䞊蚘どのプロダクトもおかげさたで拡倧を続けおいたすが、裏偎でぱンゞニアがプロダクトを持続的に開発・運甚するために日々工倫を重ねおいたす。 今回は ラク スの開発組織に根付く 費甚察効果を考え、やるべき最適な察策をずる文化 をアりトプットすべく、各プロダクトでの取り組みを発信させおいただきたした。 発衚の玹介 長期的に考える技術的負債マネゞメント戊略 「負債を返すチャンスは来るので、そのチャンスを逃さないために 諊めずに負債の局所化や新しく䜜り蟌たないなど準備をしおおくのが倧事 」 今回のMeetupのコンセプトを象城するようなコメントですが、トップバッタヌであるやなせメヌルディヌラヌ担圓から出おきた蚀葉でした。 これたでのMeetupでも床々登堎しおきたメヌルディヌラヌは歎史が深く、いわゆる「技術的負債」ず向き合う機䌚も床々ありたす。 今回はあらためお技術的負債ずは䜕なのか、そしおどのように立ち向うべきかを、やなせの経隓ず理論を螏たえお語らせおいただきたした。 䌚蚈的な負債ず比范した堎合の芋えにくさ、たたビゞネスの偎面も螏たえおの方法論は倚くの゚ンゞニアに参考にしおいただけるず思いたす。 speakerdeck.com DB容量肥倧化ぞの取り組み 次の発衚は 「デヌタの肥倧化問題」 がテヌマです。 Webデヌタベヌスである楜楜販売を担圓する山内より、その補品の特長䞊、深刻ずなったデヌタ量の問題に 「Cloudian HyperStore」 ずいうオブゞェクトストレヌゞを導入しお察凊した゚ピ゜ヌドを発衚させおいただきたした。 アプリ・むンフラどちらにも倚倧な圱響を䞎える䞀倧プロゞェクトでしたが、今埌も持続的に楜楜販売を利甚いただける環境を䜜り䞊げるため、山内をはじめずするチヌムは䞻に3぀の課題ず察峙したした。 デヌタ量に関する問題は長くプロダクトを運甚しおいく䞊で避けられない問題です。 珟圚同じ問題を抱える方には、今回の発衚からヒントを埗おいただけるず幞いです。 speakerdeck.com 4幎間の レガシヌシステム 運甚から孊んだトラブル察策の取り組み方 運甚の スペシャ リストずしお配配メヌルずCurumeruの2プロダクトに関わる西尟より、運甚面からプロダクトを支えるためのプ ラク ティスを発衚させおいただきたした。 どんなに緻密に䜜ったプロダクトでもトラブルを党お未然に防ぐこずは難しいものです。 特に西尟が関わるプロダクトはメヌル配信サヌビスであるが故、以䞋の3フェヌズそれぞれでプロダクト固有の問題、たたメヌル プロトコル や業界固有の問題を抱えおいたす。 メヌルを「䜜る」 メヌルを「送る」 メヌルを「届く」 今回の発衚では未然にトラブルを防ぐこずに党力を泚ぐのではなく、起こっおしたったトラブルに劂䜕に迅速に察応するかを語っおいたす。 サヌビスの倖偎・内偎それぞれで孊びずなるプ ラク ティスが提䟛できる内容です。 speakerdeck.com Infrastructure as Codeによるむンフラ構築の自動化により、オペレヌションミスを防ぐ仕組みづくり 最埌にむンフラ゚ンゞニアである山村よりむンフラ゚ンゞニア目線での技術的負債ずは䜕か、そしおInfrastructure as Codeを䞭心ずした技術的負債ぞの察凊方法を発衚させおいただきたした。 チャットディヌラヌの運甚・保守をメむンに担圓する山村ですが、着任より珟圚に至るたで様々な技術的負債に着目する䞭、特に「共有䞍足で実装内容の ブラックボックス 化による負債」には匷い問題意識を持っおいたした。 解決策ずしお線み出したプ ラク ティスは属人性の解消のみならず、いたや䜜業 工数 ずしおも倧きく寄䞎する゜リュヌションずなっおいたす。 むンフラ・アプリに関わらず、どの゚ンゞニアにも是非ご参考にしおいただきたいプ ラク ティスばかりです。 speakerdeck.com おわりに 持続可胜な倧芏暡 SaaS 䌁業の開発戊略、いかがでしたでしょうか ラク スは倚様な SaaS を長く開発し続けるこずで、 費甚察効果を考え、やるべき最適な察策をずるための戊略ず思考 が根付いおいたす。 今回の4名の゚ンゞニアの発衚より、その䞀端を感じ取っおいただければ幞いです。 次回はそんな倚様な SaaS から フロント゚ンド に特化したテヌマで、10月にMeetupを開催予定です Vue.js、Typescriptなどのモダンなフロント゚ンドにご興味のある方は、ぜひconnpassをりォッチいただければず思いたす rakus.connpass.com rakus.connpass.com
こんにちは。 やなせたかし です。 今回は「繰り返し」に぀いお掘り䞋げおみようず思いたす。 PHP に限ったこずではないですが、繰り返しはプログラミングでは基本的な操䜜です。たずえば、 while for など、凊理を繰り返す構文です。その䞭でも利甚頻床が高いのは for でしょうかサンプルコヌドでも配列を繰り返す時に䜿われたりず目にするこずが倚いず思いたす。 PHP であれば、 foreach ずいう構文もありたす。これも繰り返しのようです。 この䞭でも、 for ず foreach どちらを䜿うのかが議論されたり、どちらのほうが性胜がいいだの悪いだの、過去にも比范されおきたした。2020幎の珟圚、(あくたで PHP 䞊での)䞡者にどんな差があるのでしょうか。 forを眺める 以䞋のコヌドを䟋に考えおみたす。䜕の倉哲もない PHP コヌドです。 <?php $ a = [ 1 , 2 , 3 ] ; $ b = 0 ; for ( $ i = 0 ; $ i < count ( $ a ) ; $ i ++ ){ $ b += $ a [ $ i ] ; } 配列の和を蚈算しおいたす。この for の終了条件は $i < count($a) です。配列の倧きさたで $i が増加するず終了したす。 ずくに䜕かあるわけではないコヌドのようにも芋えたすが、よく芋るずコヌドの関心ごずがバラバラなこずに気づきたす。 たずえば、 $i はただの倉数で、配列そのものずの関係はない ルヌプ内でアクセスしおいる配列が $a であるかはルヌプの条件に絡たない 和をずる配列は $a でなくおも $aa にしおも構わない そう、 for はただのルヌプで、「配列の操䜜」ずは関係がないのです。 この「関係がない」ずいうのは、コヌドを芋おもわかるこずですが、どこたで関係がないのか 改めお for を振り返っおみたしょう。 たず、 for ずいう構文に぀いお。 さきほども曞いた通り、ルヌプを衚珟する構文です。では構文ずしおはどのようなルヌルになっおいるでしょうか ルヌルを正確に知るため、 PHP のパヌザヌを呌んで文法そのものを芋おみたしょう。 PHP のコヌドを理解しおいる郚分ですから、正確な文法がわかるはずです。 PHP そのものの゜ヌスは、以䞋から手に入りたす。 https://github.com/php/php-src ずいうこずで PHP のパヌザヌでは、 for の構文は以䞋のように定矩されおいたす。 %token T_FOR "for (T_FOR)" statement: | T_FOR '(' for_exprs ';' for_exprs ';' for_exprs ')' for_statement { $$ = zend_ast_create(ZEND_AST_FOR, $3 , $5 , $7 , $9 ); }; for() の䞭に for_exprs ずいうのが䞊んでいるのがわかりたす。そしお、最埌に for_statement ずいうものがありたす。 この for_exprs ずいうものは䜕を衚しおいるでしょうか。これは䜕もない(NULLず衚したす)か、カンマ区切りの expr のリストのようです。 ちなみに、 expr は匏を衚したす。メ゜ッド呌び出しのほか、 $a だけでも匏ですし、 $i = 0 なども匏にあたりたす。 そしお zend_ast_create ずいうものを呌び出しおいたす。ここで ZEND_AST_FOR ずいうものを枡しおいるので、ここで for文 を䜜っおいるようです。 $3,$5... はこのパヌザヌにマッチした芁玠の䜍眮っぜいですね。 正芏衚珟 のマッチっぜくも芋えたす。 さらに远っおいくず、 PHP の for の定矩が芋えおきたす。 void zend_compile_for(zend_ast *ast) { zend_ast *init_ast = ast->child[ 0 ]; // ← 1぀目のfor_exprs zend_ast *cond_ast = ast->child[ 1 ]; // ← 2぀目のfor_exprs zend_ast *loop_ast = ast->child[ 2 ]; // ← 3぀目のfor_exprs zend_ast *stmt_ast = ast->child[ 3 ]; // ← for_statement //.... } ずいうこずで、パヌザヌは for をこんな颚に理解しおいたす。 <?php for ( 開始状態の匏; 終了条件の匏; ルヌプ匏 ) for内郚の文 ずなりたす。圓たり前のこずですが、調べおみるずしっかり曞かれおいるものです。では、 for の呜什を確認しおみたしょう。 以䞋の゜ヌスのopcodeをダンプしたす。 opcodeずは、 PHP で曞かれたコヌドを コンパむル しお埗られるもので、Zend゚ンゞンで盎接実行されたす。 <?php $ a = [ 1 , 2 , 3 ] ; $ b = 0 ; for ( $ i = 0 ; $ v = count ( $ a ) ; $ i ++ ) { $ b += $ a [ $ i ] ; } するず、以䞋のようなダンプが出力されたす。 L0 (3): EXT_STMT L1 (3): ASSIGN CV0($a) array(...) L2 (4): EXT_STMT L3 (4): ASSIGN CV1($b) int(0) L4 (6): EXT_STMT L5 (6): ASSIGN CV2($i) int(0) L6 (6): JMP L12 L7 (7): EXT_STMT L8 (7): T6 = FETCH_DIM_R CV0($a) CV2($i) L9 (7): ASSIGN_ADD CV1($b) T6 L10 (6): T8 = POST_INC CV2($i) L11 (6): FREE T8 L12 (6): T9 = COUNT CV0($a) L13 (6): T10 = IS_SMALLER CV2($i) T9 L14 (6): EXT_STMT L15 (6): JMPNZ T10 L7 L16 (10): RETURN int(1) なんだか アセンブリ っぜいですね。 凊理を芋おいきたしょう。L3たでは for ず関係ない凊理です。ずいうこずで、それ以降を確認しおいきたしょう。ルヌプに関する個所は以䞋のような感じです。わりずむメヌゞ通りの呜什になっおいるのではないでしょうか。 行 凊理 L5 $i に 0 を アサむ ン L6 L12 に飛ぶ L7 - L9 $b += $a[$i] の凊理 L10 - L11 $i++ L12 T9 に count($a) の結果を保存 L13 T10 に $i < T9 の結果を保存 L15 T10 が 0 でなければ L7に飛ぶ さきほどたずめた文法ず照らし合わせるず、それぞれの匏・文が評䟡されおいる呜什の䞊びがわかりたす。初めに終了条件の匏に飛ぶ以倖は、普通にルヌプしおいるだけですね。 芁玠 行 開始状態の匏 L5 for内郚の文 L7 - L9 ルヌプ匏 L10 - L11 終了条件の匏 L12 - L15 ここで泚目したいのが、 for内郚の文 です。呜什の L8 を芋おみたしょう。配列から倀を取り出す凊理です。 L8 (7): T6 = FETCH_DIM_R CV0($a) CV2($i) ここで䜿われおいる呜什は、 FETCH_DIM_R ずなっおいたす。これは配列にむンデックスアクセスするずきの呜什です。圓たり前のこずを確認しおいるようですが、結構倧事なずころです。 このように実際の呜什たで远っおいくず、やはり for ずいうのは「配列の操䜜」ずは盎接関係のない構文である、ず蚀えるでしょう。 foreachを眺める 続いお、 foreach を芋おみたしょう。゜ヌスは以䞋の通りです。やりたいこずは倉わりたせん。 <?php $ a = [ 1 , 2 , 3 ] ; $ b = 0 ; foreach ( $ a as $ v ) { $ b += $ v ; } では、たずは foreach の文法を確認したしょう。さきほどず同じように、 PHP のパヌザヌにある定矩を確認したす。 %token T_FOREACH "foreach (T_FOREACH)" statement: | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement { $$ = zend_ast_create(ZEND_AST_FOREACH, $3 , $5 , NULL, $7 ); } | T_FOREACH '(' expr T_AS foreach_variable T_DOUBLE_ARROW foreach_variable ')' foreach_statement { $$ = zend_ast_create(ZEND_AST_FOREACH, $3 , $7 , $5 , $9 ); } どうやら foreach は2぀の文法が定矩されおいるようです。 䞊偎は配列の value だけを、䞋偎は T_DOUBLE_ARROW ずあるように配列の key, value 䞡方䜿甚するタむプですね。 ここで出おくるそれぞれの芁玠も、なんずなくむメヌゞできそうです。 そしお、さらに远いかけるず、 foreach の定矩にたどり着きたす。 void zend_compile_foreach(zend_ast *ast) /* {{{ */ { zend_ast *expr_ast = ast->child[ 0 ]; // foreachで回すもの zend_ast *value_ast = ast->child[ 1 ]; // foreachで回される「倀」 zend_ast *key_ast = ast->child[ 2 ]; // foreachで回される「キヌ」 zend_ast *stmt_ast = ast->child[ 3 ]; // 逐次凊理される文 //・・・ } PHP パヌザヌはこのように理解しおいたす。䜙談ですが、読み進めおいくず foreach は「倀」が参照かどうかで凊理を切り替えおいる、ずいうこずもここから読み取れたす。 今回は倀を枡した時の挙動に絞っお芋おいきたしょう。 ずいうこずで、実行されおいる様子を調べたす。 調べるのは以䞋のコヌドです。 <?php $ a = [ 1 , 2 , 3 ] ; $ b = 0 ; foreach ( $ a as $ v ) { $ b += $ v ; } このopcodeのダンプは以䞋の通りです。 L0 (3): EXT_STMT L1 (3): ASSIGN CV0($a) array(...) L2 (4): EXT_STMT L3 (4): ASSIGN CV1($b) int(0) L4 (6): EXT_STMT L5 (6): V5 = FE_RESET_R CV0($a) L10 L6 (6): FE_FETCH_R V5 CV2($v) L10 L7 (7): EXT_STMT L8 (7): ASSIGN_ADD CV1($b) CV2($v) L9 (6): JMP L6 L10 (6): FE_FREE V5 L11 (10): RETURN int(1) LIVE RANGES: 5: L6 - L10 (loop) 芋おの通り、 for ず比べおかなり異なりたす。 L3たでは飛ばしお、 foreach 内郚を芋おいきたしょう。 行 凊理 L5 V5 に $a の むテレヌタ ヌを保存 無ければL10ぞ L6 $v に V5 から倀を取埗し アサむ ン 終端ならL10ぞ L8 $b += $v L9 L6に飛ぶ L10 V5 を解攟 opcodeレベルではずおもシンプルになっおいたす。ここで泚目したいのは、 L5 - L6 の郚分です。 FE_RESET_R , FE_FETCH_R は、 foreach で䜿甚する呜什です。配列 $a からの倀の取埗自䜓が foreach の機胜である、ずいうこずですね。 逆に for は普通の配列アクセス呜什でした。こういったずころにも単玔な繰り返しの for ず、配列を逐次凊理する foreach の違いがありたす。 たずめ for ず foreach の䞡者を比范しおみるず、構文ごずの目的の違いがわかりたした。 for は繰り返し凊理のための構文 foreach は逐次凊理のための構文 䞀芋どちらも繰り返しを目的ずしおいるようですが、 foreach のほうが甚途を限定されおいたす。 foreach はしばしば for をシンプルに曞けるようになったず衚珟されたりしたすが、実際にopcodeで比范しおみるず、 for の シンタックス シュガヌではなく、内郚ではしっかり別の凊理です。 䜕気なく䜿っおいる構文でも、調べおみるず意倖ず奥深いものです。
はじめに はじめたしお、新卒1幎目のyykaoruです。 今回は私事ですが、匕っ越しをした際に実家にキヌボヌド・マりスをおいおきおしたい、キヌボヌド・マりス・モニタヌがない状態でなんずかしお Raspberry Pi にアクセスするお話です。 やっおみたこず抂芁 Raspberry Pi を賌入しりキりキで 開封 しおいた際に、あるこずに気が付きたした。 「あれ、ノヌトPCはあるけど、 Raspberry Pi 甚のキヌボヌドずマりスない・・・」 しかし、どうにかしお早くさわりたい...しばらく考えた結果 「せやネットワヌクに接続された Raspberry Pi の IPアドレス (プラむベヌト)特定しお SSH 接続でなんずかしたらええんや」 今回は Raspberry Pi をセットアップする際にノヌトPCはあるのですが、キヌボヌド・マりス・モニタヌがない堎合に Raspberry Pi の IPアドレス を特定し、 SSH を利甚しお Raspberry Pi にアクセスする方法を玹介しようず思いたす。 今回の䜿甚機噚&環境 Raspberry Pi 4 Model B(8GB) Raspberry Pi 4 Model B甚電源(USB Type-c 5V 3A) ノヌトPC(windows10) microSD (32GB) microSD をPCに接続するためのアダプタ(USBタむプ、SDカヌドタむプなどお奜みで) 有線LANケヌブル ネットワヌク環境 環境構築 Raspberry Pi の OS むンストヌルは ラズベリヌ パむ財団公匏が提䟛しおいる Raspberry Pi Imager を利甚したす。 今回は Raspberry Pi で䜿甚するOSずしお Ubuntu 20.04.1 LTSを䜿甚したす。 OSのむンストヌルが完了した埌にSDカヌドをもう䞀床マりントするずSDストレヌゞが出珟し、䞭身はboot ディレクト リになっおいたす。 ここの䞭に新たに ssh ずいうファむル名のファむルを䜜成しおおきたす。 これにより、初期起動時に ssh 機胜が有効になりたす。 Raspberry Pi に電源ずネットワヌクルヌタに぀ながった有線LANケヌブルを接続したす。 分くらい埅ちたす。 これで準備は完了です。 ノヌトPCから Raspberry Pi に SSH で接続 ノヌトPCで「 windowsキヌ + R」をし、入力欄に「cmd」ず入力したす。 するず コマンドプロンプト が起動したす。 そこに「 arp -a」を打ち蟌みたす。 するず同じネットワヌクに接続されおいる IPアドレス ず MACアドレス が衚瀺されたす。 衚瀺された䞀芧の情報で MACアドレス が「B8:27:EB:」か「DC:A6:32:」か「E4:5F:01:」で始たるものを探したす。 これは Raspberry Pi の MACアドレス のレンゞがこの぀に割り圓おられおいるのでそれを利甚しお Raspberry Pi を特定する為です。 詳现は以䞋のサむトで確認できたす。 udger.com 今回玹介した MACアドレス で始たる MACアドレス が曞かれた行の IPアドレス をメモしおおきたす。 今回私の環境では「192.168.10.110」が割り圓おられおいたした。 これで Raspberry Pi の IPアドレス が特定するこずができたので、 SSH 接続を詊みたす。 「 ssh ubunntu@192.168.10.110」を コマンドプロンプト に入力したす。 するず以䞋の画像のように Raspberry Pi の Ubuntu に接続するこずができたした。 ログむンの初期パスワヌドはOSが Ubuntu の堎合「 ubuntu 」ずなっおいるので、これを入力し、 新たにログ むンパス ワヌドの蚭定を行うように芁求されるのでパスワヌドを蚭定したす。 これで、もう䞀床 SSH 接続をし、蚭定したパスワヌドでログむンするず、 Raspberry Pi に接続するこずができたす。 埌は SSH のセキュリティ蚭定をするなり、お奜きなツヌルのむンストヌルを行ったり奜きなようにできたす 所感 今回は䌑日で Raspberry Pi で遊がうずしたずころ、肝心な入力系の機噚を甚意し忘れおしたったこずから 新たな方法でのセットアップ方法を習埗するこずができたした。 始たりはずおも初歩的なミスでしたが、結果ずしお新しい知識を埗るこずができたのでずおも満足しおいたす。 セットアップした Raspberry Pi はせっかくなのでお家環境モニタリングシステムにでも掻甚しようず思いたす。 そのお話はたたい぀かの機䌚にできたらず思いたす では ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
こんにちは、 id:eichisanden です。 瀟内の有志ずDDD ドメむン 駆動蚭蚈関連の2冊の曞籍の読曞䌚を開催したので、ふりかえっお曞いおいきたいず思いたす。 1冊目「゚リック・ ゚ノァ ンスの ドメむン 駆動蚭蚈」 ゚リック・゚ノァンスのドメむン駆動蚭蚈 䜜者: Eric Evans 発売日: 2013/11/20 メディア: Kindle 版 最初の題材ずしお遞んだのは、DDDの原兞「゚リック・ ゚ノァ ンスの ドメむン 駆動蚭蚈」です。 長いので以埌は「 ゚ノァ ンス本」ず呌びたす。 今幎の1月〜6月に掛けお、蚈17回開催したした。 読曞䌚をやるきっかけ ある日の瀟内チャットで、 ゚ノァ ンス本に挫折したこずで盛り䞊がったのがきっかけでした。 章ず曞いおたすが郚の間違いです かく蚀う自分も Tweet をさかのがるず3幎前に挫折しおいお、い぀かリベンゞしたいず思っおいたした。 第4郚の途䞭たで読んだけど、途䞭から字面を远っおるだけになったので再読する前提で最埌たでキヌワヌドだけ拟い読みした。普通に読んだら1ヶ月じゃ終わらんなこれ。 — A1 (@EichiSanden) 2017幎1月31日 良い機䌚なのでみんなで読曞䌚しようず蚀うこずになり、瀟内で声をかけたずころ10人のメンバヌが参加しおくれたした。 本は䌚瀟経費で賌入させおもらいたした。技術曞ずしおも高い郚類の本に入るので非垞にありがたいです。 壮芳ですが本圓はもっずありたす 読曞䌚の圢匏 週に1回 各回1.5時間 ゚クストリヌムリヌディング 圢匏 そもそも私自身が読曞䌚を䞻催したこずが無いため色々調べた結果、この方匏に決めたした。 なぜこの圢匏にしたかず蚀うず、䞋蚘のような仮説があったからです。 事前準備が必芁だず参加者の負担が倧きいのでは 誰かが講垫になるスタむルだずその人に掛かる負担が倧きいのでは 参加者の負担が倧きいず参加が離脱しおいっおしたうのではないか 特に事前準備はせずず蚀っおも䞻催者の私は䞍安なので読みたしたが、読曞䌚圓日は数ペヌゞ皋床のパヌトに切っお、読んでは議論を数セット繰り返したした。 分からなかったこずや他の人の意芋を聞きたいこずは付箋に曞いおいお、読み終わったらホワむトボヌドに貌っお議論したした。 やっおみおどうだったか みんなで理解を補いながら読めるから理解しやすい 参加者の䞭にはDDDを実践しおいるチヌムの人や、以前にこの本やIDDD本を読んで知識がある人がいたりしお、 意味が分からなかったずころは他の人の解釈を聞くこずで理解の助けになりたした。 ただし難しいずころはみんなで読んでも難しい 内容の難しさに茪をかけお文章の構造が分かりにくくお意味が掎めない箇所に぀いおは、 みんなで束になっお掛かっおも分からないこずもありたした。 10章しなやかな蚭蚈の「抂念の茪郭」が意味わからなすぎお蟛い。頭が割れるヌ — A1 (@EichiSanden) 2020幎3月2日 理解できた方が良いんですが、みんなも分からないのだから自分だけ理解力がない蚳ではないず蚀う倉な安心感もありたした笑 これに぀いおは他の本も含め行ったりきたり䜕床も読むこずでブレむクスルヌがあるかもしれないず思いたした。 もしかするず分からない文は英語の原曞も䜵せお読むこずで理解できる物もあるかもず思いたしたこれは実践できおたせんが 事前に読んできおもらうスタむルの方が良かったかもしれない 参加者の負担を䞋げたこずで完走率は高くなったずも思いたすが、 この本のように難易床が高い堎合は、事前に読んできおもらい圓日は議論に集䞭した方が良かったかもしれないずも思っおいたす。 これは読曞䌚に求める期埅効果によっお実斜スタむルは今埌は䜿い分ようず終わっおみお思いたした。 技術曞を読む習慣がない人にもっず本を読んで欲しい  → 本を読む機䌚を䜜るこずが目的なので圓日読めば良い 本の内容を深く理解するため他の人ず議論したい  → 事前に読んできおもらっお議論を䞭心にする 2冊目「 ドメむン 駆動蚭蚈 モデリング /実装ガむド」 booth.pm 今幎の7月〜8月に掛けお、蚈8回開催したした。 読曞䌚をやるきっかけ ゚ノァ ンス本でモデルや ナビキタス 蚀語など戊略的な蚭蚈はなんずなくは理解できたが、具䜓的なむメヌゞが湧かなかったため評刀が良かったこの本を読んでみたずころ良い本でしたので読曞䌚の題材にしたした。 コロナの圱響でオンラむンでの開催になり堎所の制玄がなくなったため、他拠点のメンバヌにも声をかけたずころ18名ものメンバヌが参加しおくれたした。 読曞䌚の圢匏 オンラむン圢匏(ZOOM) ゚クストリヌムリヌディング圢匏 事前に Github のIssueに持ち回りで抂芁をたずめおおく 圓日は疑問点などをSli.doに曞いおもらっお読み終わったら議論した やっおみおどうだったか ゚ノァ ンス本に比べお本の内容がスッず頭に入っおくるので、圓日読むスタむルでも無理なくやれたした。 本を読んでもらった埌、 Github のIssueにたずめた意蚳ず自分の理解のDiffをずるこずで曎に理解が進みたした。 メンバヌが拡倧したこずでDDDを実践しおいる人も増えお、他サヌビスでDDDを実践しお困っおるこずなど生きた情報が共有されお良い読曞䌚になりたした。 番倖線 モデリング 倧䌚 参加者から発案で、去幎にネット䞊で流行っおいたチケット料金 モデリング を読曞䌚の集倧成ずしお皆んなでやっおみたした。 実際に手を動かしおみるず自分の理解床合いが分かりたすし、コヌドも曞いおみないずモデルを完成させるのが難しいず蚀うのを肌で感じるこずができたした。 拙䜜ですが、モデルには「振る舞い」たで曞かない方が良いかもね、ず他の参加者にフィヌドバックもらいたした。 github.com チケット料金 モデリング はお題ずしおちょっず難しかった気がするので、 もっずシンプルなお題でたたやっおみたいず思っおいたす。 最埌に 読曞䌚の題材ずしおDDDの本は向いおいお、 ゚ノァ ンス本は耇数人で助け合いながら読むのが良かったです。 ゚ノァ ンス本で モデリング や ナビキタス 蚀語の重芁性を理解した埌で、噛み砕いた本で理解を深めるのは順番ずしおは悪くなかったのではず思っおいたす。 読曞䌚を開催する時の参考になれば幞いです。