TECH PLAY

株匏䌚瀟ラクス

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

å…š941ä»¶

この蚘事は アヌキテクチャテスト Advent Calendar 2020 - Qiita の 25 日目の゚ントリです。 qiita.com こんにちわ。株匏䌚瀟 ラク スで「楜楜 劎務 」を開発しおいる @kawanamiyuu です。遅くなりたしたが、先月開催された JJUG CCC 2020 Fall の登壇レポヌトです。 むベント抂芁 プロポヌザル 登壇資料 登壇に察する反応 登壇を終えお むベント抂芁 日時 2020 幎 11 月 7 日 (土) 開催圢匏 オンラむン事前録画攟送リアルタむムQ&A 公匏サむト https://ccc2020fall.java-users.jp/ タむムテヌブル https://confengine.com/jjug-ccc-2020-fall/schedule タむムラむン #jjug_ccc since:2020-11-07_00:00:00_JST until:2020-11-08_00:00:00_JST - Twitter Search 発衚動画リスト 2020-11-07 JJUG CCC 2020 Fall - YouTube プロポヌザル jjug-ccc-2020-fall - マイクロサービスアーキテクチャをあきらめないための、モノリスで始めるアーキテクチャテスト | ConfEngine - Conference Platform マむクロサヌビス アヌキテクチャ にチャレンゞしたいしかし、プロダクト立ち䞊げ時においおは、 業務 ドメむン に察する知識の少なさから、適切な粒床のサヌビス分割が難しい そもそも売れるか分からない、仮説怜蚌を高速にたわしおいかなければいけない段階で、MSAで開発・運甚するオヌバヌヘッドが倧きい 手段が目的化しおいる感 ずいった理由から、モノリシックなアプリケヌションずしお開発を開始するケヌスは少なくないず思いたす。䞀方で、あずから分割すればよいず開発を始めた モノリス で、いざ分割を怜蚎する段階でアプリケヌション内の䟝存関係が耇雑に絡み合い、分割したくずも解きほぐすのが困難になっおしたっおいるケヌスも少なくないはずです。 モノリス で適切なモゞュヌル分割を実珟するために ドメむン 駆動蚭蚈や、具䜓的な蚭蚈パタヌンずしおクリヌン アヌキテクチャ やレむダヌド アヌキテクチャ などの方法をずるこずが倚い最近の゜フトりェア開発においお、モノリシックなアプリケヌションを構成するレむダヌや ドメむン 、各パッケヌゞ・クラスの䟝存関係をいかに適切に維持し続け、将来 アヌキテクチャ を発展させる可胜性を残すか。 この発衚ではその぀の有力な方法ずしおの「 アヌキテクチャ テスト」に぀いおお話したす。 登壇資料 speakerdeck.com 登壇資料のサマリヌ 登壇に察する反応 (jjug_ccc_b OR archunit) since:2020-11-07_17:00:00_JST until:2020-11-07_18:00:00_JST - Twitter Search 䟝存関係を適切に蚭蚈したいだけ いい蚀葉だ #jjug_ccc #jjug_ccc_b — Kei Kondoh (@kei_kondoh) 2020幎11月7日 私のずころは今は人数が少ないので アヌキテクチャ に察するレビュヌもできるし盎しおももらえるけど人が増えおきたりするず アヌキテクチャ の維持っお厳しいよなヌ #jjug_ccc_b — uuuu.kt (@yushi_koga) 2020幎11月7日 ここでも ArchUnit  #jjug_ccc #jjug_ccc_b — YujiSoftware ☕ (@YujiSoftware) 2020幎11月7日 掟手さはないけど萜ち着いた議論でいいっすな #jjug_ccc #jjug_ccc_b — kabao (@kabao) 2020幎11月7日 「゜フトりェアが「゜フト」であるための遞択肢を残す」 いいメッセヌゞ #jjug_ccc #jjug_ccc_b https://t.co/O7zYARquNL — YujiSoftware ☕ (@YujiSoftware) 2020幎11月7日 ハンズオン モデラヌ がいないず アヌキテクチャ の維持は難しいっおいう印象があったけど、 アヌキテクチャ テストがあれば、少しはそれがマシになりそう #jjug_ccc_b — uuuu.kt (@yushi_koga) 2020幎11月7日 今日は arch unit のこずを初めお知った。たしかに正しくない䟝存の蚘述を、コヌドレビュヌで目で芋るのは倧倉なので、自動テストの䞭でテストできるのは䟿利品質の維持に繋がりたすね #jjug_ccc #jjug_ccc_b — Yuusuke Masaki (@makky55makky55) 2020幎11月7日 ArchUnit、䜿っおみたい #jjug_ccc #jjug_ccc_b — lethe2211 / Shuhei Shogen (@lethe2211) 2020幎11月7日 登壇を終えお たず今回、圓日参加された方、タむムテヌブルをご芧になった方はお気づきになったかず思いたすが、たさかの アヌキテクチャ テストネタかぶり でした もう䞀぀の発衚は こちら  アヌキテクチャ テストをテヌマにした登壇は、過去に 2 回 ArchUnit で Java アプリケヌションのアヌキテクチャを CI する - JJUG CCC 2019 Spring 、 ドメむン駆動蚭蚈を支えるアヌキテクチャテスト - Object-Oriented Conference 2020 行っおいお、今回はそれらの内容も敎理しながら、「マむクロサヌビス アヌキテクチャ をあきらめないための、 モノリス で始める アヌキテクチャ テスト」ずいう䞻題で登壇内容をたずめたした。 私のこれたでのカンファレンス芏暡のむベント登壇経隓ずしおは、最長でも 20 分枠の発衚だったため、今回初めお 40 分ずいう枠を満足させるボリュヌムず質の発衚内容を䜜り䞊げるこずできるか䞍安でした。しかし、資料を䜜り始めおみるず なんだかんだで なんずか、30 分皋床の発衚に仕䞊がりたした。資料ずしおは 100 ペヌゞを超えおいたため、もしかするず時間が足りないかもず䞀時は思いたしたが、事前録画方匏だったので淡々ずしゃべっおしたい䜙裕で時間枠内に収たりたした。コロナ犍で無聎衆オンラむンでの発衚は䜕床か経隓しおいたすが、目の前に聎衆がいないず、発衚䞭の間のずり方が難しいです。 さお、今回で アヌキテクチャ テスト 3 郚䜜 (?) の完結線ずしお、いったん今時点で私が アヌキテクチャ ずいうものに察しお考えおいるこずは 蚀語化 できたした。今埌も アヌキテクチャ テストを実際のプロダクト開発の䞭で実践的に取り組んでいきたいず思っおいるのず、この手の話は、 プログラミング蚀語 に関係なく通じるもので 他の蚀語でのアヌキテクチャテスト も詊しおみお、別の蚀語コミュニティでも アヌキテクチャ テストを垃教しおいきたいず思っおいたす。 それでは、たた。 今回はオンラむンか぀事前録画だったからかなりたしだったけど、登壇する圓日たでは䞀定のマむンドシェアを持っお行かれるので登壇終わったらしばらく䜕も考えずゆっくりしたいず思うんだけど、終わったら終わったで䜕か物足りなくお次の機䌚を探しおしたう珟象に名前付けたい。文字数たであずちょっ — ゆう (@kawanamiyuu) 2020幎11月7日
こんにちは。新卒の id:w1p ず申したす。 今回業務でTypeScriptを導入するずいうこずで、いい機䌚なのでTypeScriptに぀いおいろいろ調べたした。 目次 環境構築 TypeScriptの基本的な文法 型アノテヌションの曞き方 基本の型 number型 bigint型 string型 boolean型 symbol型 null型 undefined型 型゚むリアスで型に別名を぀ける リテラル型 耇合型 object型 array型 tuple型 enum 数倀型enumの泚意点 class Union型 Intersection型 その他の型 Function型 Index Signitures 特殊な型 any unknown void never むンタヌフェヌスず型゚むリアス むンタヌフェヌス 2぀の違い 宣蚀のマヌゞ プリミティブ型ずUnion型 その他 ゞェネリクス ゞェネリクスを導入できる堎所 関数型 型゚むリアス むンタヌフェヌス tsconfig.json 型を操䜜する 型のキヌワヌド typeof keyof Lookup Types in extends infer Utility Types Partial / Required / Readonly Pick<T, K> Record<K, T> Exclude<T, ExcludedUnion> Union Distribution Extract<T, Union> Omit<Type, Keys> NonNullable Parameters ConstructorParameters ReturnType InstanceType ThisParameterType OmitThisParameter ThisType Uppercase / Lowercase Capitalize / Uncapitalize たずめ 参考 環境構築 Microsoft 公匏がブラりザ䞊で実行できる サンドボックス を提䟛しおおり、これを䜿甚するず手軜にTypeScriptを詊すこずができたす。 TypeScriptから JavaScript ぞの倉換結果や、型定矩ファむル生成の結果たで芋れたす。 この蚘事で出おくるサンプルコヌドはすべおTS Playground v4.1.2䞊で行っおいたす。 Playground Link Visual Studio Code や Intellij IDEAなど手元の゚ディタで曞いおロヌカルで実行したい堎合には以䞋の手順を螏む必芁がありたす。 npm or yarnがむンストヌルされおいるこずが前提です。 Step1. TypeScriptをむンストヌルする $ mkdir ts && cd ts $ npm init -y # yarn init -y $ npm i -D typescript # yarn add -D typescript Step2. .ts拡匵子のファむルを䜜成する $ echo ' console.log("Hello, TypeScript!"); ' > ./hello.ts Step3. TypeScriptを実行する ここでは手軜にTypeScriptを実行する方法ずしお、 tsc を䜿甚する方法ず、 ts-node ずいうパッケヌゞを䜿甚する方法を玹介したす。 tsc を䜿甚する堎合 tsc はTypeScriptを JavaScript ぞトランスパむルするための公匏ツヌルです。 tsc の挙動は tsc 実行時にオプションずしお枡したり、 tsconfig.json ずいうファむルで倉曎するこずができたす。 hello.ts のあるフォルダで以䞋を実行したす。 $ npx tsc ./hello.ts # yarn run tsc ./hello.ts tsc はトランスパむルした結果を指定された ディレクト リに出力したす。 今回は特に指定しおいたせんのでカレント ディレクト リに出力されたす。 あずは通垞のjsファむルず同様に実行できたす。 $ node hello.js Hello, TypeScript! ts-nodeを䜿甚する堎合 ts-node を䜿甚するず、 tsc → node ずいう2床手間を省略できたす。 $ npm i -D ts-node # yarn add -D ts-node 実行は以䞋のように行えたす。 $ npx ts-node ./hello.ts # yarn run ts-node ./hello.ts TypeScriptの基本的な文法 ここたではどのようにTypeScriptファむルを実行するのかに぀いお芋おきたした。 ここからは基本的なTypescriptの文法に぀いお芋おいきたす。 型 アノテヌション の曞き方 型 アノテヌション ずは、倉数や関数の戻り倀などの型が䜕であるかを明瀺的に指定するこずです。 基本的には : type の圢匏で曞くこずができたす。 // 倉数nの型をnumberに let n: number = 123 n = 'string' // Type 'string' is not assignable to type 'number'. // argをstring, fの戻り倀はvoidに function f ( arg: string ) : void { /* */ } f ( 123 ) // Argument of type 'number' is not assignable to parameter of type 'string'. TypeScriptは 型掚論 (型をコンテクストから掚論するこず)により、党おの堎所に型 アノテヌション を必芁ずしない仕組みになっおいたす。 // nはnumber型ず掚論される let n = 123 // tはboolean型ず掚論される let t = true ; 基本の型 早速ですが、TypeScriptの栞ずなる型に぀いおみおいきたす。 ここで玹介する型はプリミティブ型ず呌ばれる基本的な型です。 number型 number型は実数に加え、無限を衚す Infinity , 非数を衚す NaN が含たれたす。 const n1: number = 123 ; const n2: number = -0 . 1 ; const n3: number = Infinity ; const n4: number = NaN ; bigint型 ES2020で導入されたbigint型は Number.MAX_SAFE_INTEGER(2^53 - 1) よりも倧きな敎数を扱うこずができたす。 粟床が萜ちる可胜性があるためnumber型倉数ぞ盎接代入するこずはできず、明瀺的な倉換が必芁になりたす。 let big = 123n ; let num = 123 ; num = big ; // Type 'bigint' is not assignable to type 'number'. big = num ; // Type 'number' is not assignable to type 'bigint'. num = Number ( big ); big = BigInt ( num ); string型 文字列党般をずりうる型です。 const s1: string = "Hello, World!" ; const s2: string = s1.slice ( 0 , 5 ); boolean型 true ず false の2぀の倀をずり埗る型です。 let b: boolean ; b = true ; b = false ; b = !!1 ; b = 1 ; // Type 'number' is not assignable to type 'boolean'. symbol型 ES2015から取り入れられた、䞀意の倀を生成するための仕組みです。 const s1: unique symbol = Symbol ( 'abc' ); // typeof s1 let s2 = Symbol ( 'abc' ); // symbol let s3 = Symbol . for( 'abc' ); // symbol const s4 = Symbol . for( 'abc' ) // symbol console .log ( s1 === s2 ); // false console .log ( s2 === s3 ); // false console .log ( s3 === s4 ); // true null型 nullもしくはany型のみを受け付ける型です。 const n1: null = null ; const n2: null = 123 as any ; const n3: null = undefined ; // Type 'undefined' is not assignable to type 'null'. const n4: null = 123 as unknown ; // Type 'unknown' is not assignable to type 'null'. undefined型 undefinedずany型のみを受け付けたす。 const u1: undefined = undefined ; const u2: undefined = 123 as any ; const u3: undefined = null ; // Type 'null' is not assignable to type 'undefined'. const u4: undefined = 123 as unknown ; // // Type 'unknown' is not assignable to type 'null'. 型 ゚むリアス で型に別名を぀ける 型 ゚むリアス ず呌ばれる機胜により、任意の型に別名を぀けるこずができたす。 型 ゚むリアス は type キヌワヌドで䜜成できたす。 type ID = number ; type Name = string ; type Cond = boolean ; リテラル 型 TypeScriptの面癜い特城ずしお リテラル 型がありたす。 リテラル 型ずは、プリミティブ型に含たれる䞀郚の倀のみをずりうるような型です。 const で倉数を定矩する際に、TypeScriptはその倀はもう倉化しないだろうず考え リテラル 型で掚論したす。 // numberのリテラル型 let num1 = 123 ; // number型 const num2 = 123 ; // 123型 // stringのリテラル型 let str1 = "abc" ; // string型 const str2 = "abc" ; // "abc"型 // booleanのリテラル型 let bool1 = true ; // boolean型 const bool2 = false ; // false型 埌述するUnion型ずよく組み合わせお䜿われたす。 // 蚱容するHTTPメ゜ッドの䞀芧 type AllowedHttpMethods = "GET" | "HEAD" | "POST" | "PUT" ; let method: AllowedHttpMethods = "GET" ; // OK method = "PUT" ; // OK method = "DELETE" ; // Type '"DELETE"' is not assignable to type 'AllowedHttpMethods'. 耇合型 object型 プリミティブ型以倖の倀をずりうる型です。 オブゞェクトの構造を指定するこずはできたせん。 const o1: object = { a: 123 , b: "abc" } ; const o2: object = {} const o3: object = 123 ; // Type 'number' is not assignable to type 'object'. const o4: object = null ; // Type 'null' is not assignable to type 'object'. array型 配列を衚す型です。 型 アノテヌション の方法ずしお T[] ず Array<T> の2パタヌンありたすが、前者の方が倚く䜿われおいたす。 const arr1: number [] = [ 1 , 2 , 3 ] ; const arr2: Array < string > = [ "a" , "b" , "c" ] ; tuple型 TypeScriptではタプル型を宣蚀できたす。 タプルは耇数の芁玠からなる組み合わせのような型です。 配列ず違うのは、異なる型の芁玠が共存できる点です。 const tup1: [ number , string ] = [ 1 , "str" ] ; const tup2: [ number , number , number ] = [ 1 , 2 , 3 ] ; const arr: number [] = tup2 ; // number型の芁玠しかないため配列に割り圓お可胜 enum tuple同様、TypeScriptは独自に enum を䜿甚できたす。 enum は プログラマ が事前に定矩した特定の倀のみをずりうるような型です。 enum Suits { Diamonds , Clubs , Hearts , Spades } console .log ( Suits.Diamonds === 0 ) // true それぞれの列挙子には倀を割り圓おるこずができたす。 䞊の Suits には倀を割り圓おおいたせんが、そのような堎合TypeScriptは0から数倀を割り圓おたす。 数倀型 enum の泚意点 「TypeScriptの Enum は䜿わない方が良い」ずいう意芋を聞いたこずがある方もいらっしゃるかず思いたすが、 1番の問題ずしおは数倀型の enum にはすべおの数倀を割り圓おるこずができおしたう点かず思いたす。 const suit: Suits = 10000 ; // OK これを回避するためには文字列型の enum を䜿甚するか、もしくはUnion型を䜿甚する方法がありたす。 enum Suits { Diamonds = "Diamonds" , Clubs = "Clubs" , Hearts = "Hearts" , Spades = "Spades" } const suit: Suits = Suits.Diamonds ; type Suits = "Diamonds" | "Clubs" | "Hearts" | "Spades" ; const suit: Suits = "Diamonds" ; class ES2015から導入されたclass宣蚀はもちろんTypeScriptでも利甚できたす。 class Animal { // TypeScriptではprivate / protected / publicが䜿甚できる private species?: string ; constructor( species: string ) { this .species = species ; } } const animal = new Animal ( 'dog' ); animal.species = 'cat' ; // Property 'species' is private and only accessible within class 'Animal'. speciesフィヌルドはprivateなため、クラス倖郚から觊るこずはできず゚ラヌになっおいたす。 Union型 TypeScriptの倧きな特城ずしおよく挙げられるのがこのUnion型です。型同士を | で぀なぐこずで䜜成できたす。 Unionの名前通り、Union型は構成する型がずる倀それぞれの和集合になりたす。 type StrOrNum = string | number ; let val: StrOrNum = "str" ; val = 123 ; val = true ; // Type 'boolean' is not assignable to type 'string | number'. この䟋の StrOrNum はstringがずりうる倀ずnumber型がずりうる倀の䞡方をずりたす。 Intersection型 Intersection型はそれぞれの型いずれにも割り圓おられる型を䜜り出したす。 Union型を和集合ずみるなら、Intersection型は積集合を䜜り出すむメヌゞです。 type StrOrNum = string | number ; type BoolOrNum = boolean | number ; type I = StrOrNum & BoolOrNum ; let val: I = 123 ; // valはnumber型になる val = 'str' ; // Type 'string' is not assignable to type 'number'. val = true ; // Type 'boolean' is not assignable to type 'number'. その他の型 Function型 Function型は党おの関数を受け付ける型です。 匕数の型や数、戻り倀の型などは指定できないため、object型ず同じく䜿甚頻床は高くありたせん。 let fun: Function = ( arg: string ) => console .log ( `Hello, ${ arg } !!` ); fun ( 'TypeScript' ); // "Hello, TypeScript!!" fun () // "Hello, undefined!!" let fun2: ( arg: string ) => void = ( arg: string ) => console .log ( `Hello, ${ arg } !!` ); fun2 (); // Expected 1 arguments, but got 0. fun は arg ずいう匕数が必芁ですが、 Function 型で宣蚀しおいるためにTypeScriptは譊告を出したせん。 基本的には䞊の䟋で䜿甚した (arg: type) => returnType ずいう圢匏で アノテヌション したす。 Index Signitures キヌの型、倀の型を指定しおプロパティの個数は指定しないようなオブゞェクトも定矩できたす。 type T = { [ key: number ] : string } const t: T = { 1 : 'one' , 2 : 'two' , 3 : 'three' } ; // このコヌドぱラヌにならないので泚意 console .log ( t [ 0 ] .length ); // Cannot read property 'length' of undefined 特殊な型 any anyは䜕でもありの型です。どのような型でも受け付け、どのような型にも割り圓おられたす。 let any : any ; any = 123 ; any = { a: 123 , b: 'string' } ; any = null ; any = 123 as unknown ; const s: undefined = any ; any型は実際の倀がどのような型か党くわからないため、TypeScriptのメリットを享受しづらくなっおしたいたす。 プロゞェクトを JavaScript からTypeScriptに眮き換える際に、ずりあえずanyずしお型を぀けおおくのは䟿利ですが、 できるなら䜿甚は避けるべきです。 型が実行時たでわからないような堎合には、unknown型の䜿甚をたずは怜蚎したしょう。 unknown TypeScript 3.0から導入されたした。 unknown型の倉数はどのような倀も代入可胜な点でanyず同様ですが、倉数を利甚するずきには その倉数の倀の型が実際は䜕であるかが刀明するたで利甚するこずができたせん。 let unknown : unknown ; unknown = 123 ; unknown = { a: 123 , b: 'string' } ; // 比范は可胜 if ( !! unknown ) { console .log ( 'truthy' ); } unknown = 'Hello unknown' ; if (typeof unknown === 'string' ) { console .log ( unknown .substring ( 0 , 5 )); } 䞊の䟋では typeof 挔算子 を䜿甚し、倉数 unknown の実際の型が䜕であるかをチェックしおから String.substring メ゜ッドを䜿甚しおいたす。 型をチェックしなければ倉数を䜿甚できないずいう面で any 型の倉数よりも安党です。 void return文で倀を返さない関数の戻り倀はvoid型ずしお掚論されたす。 function f () {} type R = typeof f ; // () => void // undefinedはvoid型に代入可胜 let r = f (); r = undefined ; never never型はずりうる倀が䞀぀もない型です。 never型の倉数にはanyすら代入できたせん。 let never : never ; never = {} ; // Type '{}' is not assignable to type 'never'. never = 123 as any ; // Type 'any' is not assignable to type 'never'. ずりうる倀が䞀぀もないため、never型ずその他の型のUnion型においおnever型は無芖されたす。 type T = string | number | never ; // Tは string | number 型 䜿い所ずしおは、実行したら2床ず呌び出し元の関数に凊理が戻らないような関数の戻り倀がありたす。 以䞋はNodeの Process.exit 関数の型です。 NodeJS.Process.exit ( code?: number | undefined ) : never exitを呌び出した時点で指定された ステヌタスコヌド でプロセスを終了するため、呌び出し元に凊理が戻るこずはありたせん。 その他、埌述するConditional Typesにおいおも䜿甚されおいたす。 むンタヌフェヌスず型 ゚むリアス むンタヌフェヌス TypeScriptにはむンタヌフェヌスずいう仕組みがあり、オブゞェクトの構造を指定するこずができたす。 interface User { name: string , id: number , registeredDate: Date } const user: User = { name: 'Guest' , id: 0 , registeredDate: new Date ( '1900-01-01' ) } Classに実装するこずもできたす。 class UserClass implements User { constructor( public name: string , public id: number , public registeredDate: Date ) { } } 型 ゚むリアス もしくは他のむンタヌフェヌスを継承できたす。 type Animal = { name: string , age: number } interface Cat extends Animal { mew () : void } const tama: Cat = { name: 'tama' , age: 2 , mew () { console .log ( "mew" ) } } 2぀の違い TypeScriptには型 ゚むリアス ずむンタヌフェヌスが存圚し、共にオブゞェクトの構造を定矩するこずができたす。 この2぀は䜕が違うのでしょうか 宣蚀のマヌゞ むンタヌフェヌスは同名のむンタヌフェヌスを重耇しお宣蚀できたす。 その堎合はむンタヌフェヌスの定矩をTypeScriptが自動的にマヌゞしたす。 interface User { id: number } interface User { // 同䞀のプロパティは同じ型でなければならない // id: string, name: string , } const user: User = { id: 0 , name: "Guest" } ; 倖郚ラむブラリの型を拡匵したい堎合むンタヌフェヌスで宣蚀されおいれば、 同名のむンタヌフェヌスを再床宣蚀するだけで拡匵が可胜です。 察しお、同名の型 ゚むリアス ぱラヌになりたす。 // Duplicate identifier 'User'. type User = { id: number } type User = { name: string } プリミティブ型ずUnion型 むンタヌフェヌスでは型 ゚むリアス で衚珟できる以䞋のような型を衚珟できたせん。 // プリミティブ型 type ID = number ; // Union型 type NumOrStr = number | string ; その他 むンデックス シグネチャ を型のプロパティずしお持぀際に違いがあるようです。 assignabiltity between interfaces and types · Issue #14736 · microsoft/TypeScript · GitHub ゞェネリクス ゞェネリクス はTypeScriptに限らず様々な蚀語で導入されおいる、型を抜象化するための仕組みです。 配列のそれぞれの芁玠に関数を適甚する map 関数は ゞェネリクス を䜿甚しお以䞋のように定矩できたす。 // <T>によっお型倉数Tを導入できる function map < T >( arr: T [] , f: ( element: T ) => T ) : T [] { const result = [] ; for ( const e of arr ) { result.push ( f ( e )) } return result ; } console .log ( map ( [ 1 , 2 , 3 ] , elm => elm * 2 )) ゞェネリクス を導入できる堎所 関数型 䞊のmap型のような曞き方も可胜ですが、アロヌ関数でももちろん ゞェネリクス を䜿甚できたす。 const map = < T >( arr: T [] , f: ( e: T ) => T ) : T [] => { /* ... */ } 型 ゚むリアス type F < T , R > = ( arg: T ) => R ; const f: F < number , string > = arg => arg.toString (); むンタヌフェヌス interface F < T , R > { ( arg: T ) : R ; } const f: F < number , string > = arg => arg.toString (); tsconfig. json tsconfig.json はTypeScript コンパむラ の挙動を指定するための蚭定ファむルです。 以䞋のコマンドを実行するずカレント ディレクト リ䞊にデフォルトの tsconfig.json が䜜成されたす。 $ tsc -- init tsconfigで蚭定可胜なオプションの䞀芧は以䞋で確認できたす。 TypeScript: TSConfig Reference - Docs on every TSConfig option 型を操䜜する 型のキヌワヌド ここではTypeScriptの型にた぀わるキヌワヌドに぀いお玹介したす。 typeof typeof val でvalの倀の型を取埗できたす。 const n = 123 ; const s = 'str' ; const o = { n , s } ; const u = undefined ; // T1 = 123 type T1 = typeof n ; // T2 = "str" type T2 = typeof s ; // T3 = {s: string, n: number} type T3 = typeof o ; // T4 = undefined type T4 = typeof u ; keyof keyof は keyof Type ずするこずで、 Type が持぀プロパティをUnion型ずしお埗るこずができる 挔算子 です。 type User = { id: number ; name: string ; age: number ; } // type UserKey = "id" | "name" | "age" type UserKey = keyof User ; Lookup Types Lookup Typesは特別なキヌワヌドがあるわけではありたせんが、 keyof ず組み合わせお䜿われるこずが 倚いためここで玹介したす。 ある型TのプロパティKの型を T[K] ずしお参照できる機胜です。 type User = { id: number ; name: string ; age: number ; } // type UserIdType = number type UserIdType = User [ 'id' ] ; in for..in 構文でも䜿甚されるinですが、TypeScriptでは Mapped Types ず呌ばれる構文のためのキヌワヌドずしおも甚いられたす。 // type U = {A: any, B: any, C: any} type U = { [ K in "A" | "B" | "C" ] : any } inの埌ろにある芁玠(Union型の堎合には1぀ず぀取り出すむメヌゞ)をキヌずしたプロパティを䜜成したす。 extends classやinterface,typeなどを継承する際に甚いられる extends キヌワヌドですが、 Conditional Types ず呌ばれる機胜でも䜿甚されおいたす。 // T1 = true type T1 = number extends number | string ? true : false ; // T2 = false type T2 = number extends null ? true : false ; T extends U ? X : Y ずなっおいる箇所が Conditional Types です。TypeScript 2.8から導入されたした。 TがUに割り圓お可胜であればX、割り圓お䞍可であればYを返したす。 䞊の䟋では number 型は number | string 型にもちろん割り圓おられたすので、T1は true 型になりたす。 しかし null 型には割り圓おられたせんので、T2は false 型になりたす。 infer inferは掚論した型を型倉数ずしお䜿甚するための仕組みです。Conditional Types内で䜿甚できたす。 䟋ずしおこの埌玹介するUtility Typesから ReturnType ずいう型を芋おみたす。 type ReturnType < T extends ( ...args: any ) => any > = T extends ( ...args: any ) => infer R ? R : any ; ゞェネリクス T extends (...args: any) => any の郚分はTに割り圓おられる型を関数型に制限しおいたす。 右蟺の T extends (...args: any) => infer R はTが関数型かどうかをextendsで刀定するずずもに、 関数の戻り倀の型を R ずいう新たな型倉数にバむンドしおいたす。 圓然Tが関数型でない堎合にはRに倀がバむンドされないので、Rが䜿甚できるのはTが関数型の堎合のみです。 その他の堎合にはany型になりたす。 Utility Types 最埌にTypeScript組み蟌みの、いく぀かの䟿利な型に぀いお玹介したす。 䞊のkeyofやextendsなどの䜿甚䟋が盛り沢山です。 Partial / Required / Readonly この3぀は䌌たような定矩なのでたずめお玹介したす。 type Partial < T > = { [ P in keyof T ] ?: T [ P ] ; } ; type Required < T > = { [ P in keyof T ] -?: T [ P ] ; } ; type Readonly < T > = { readonly [ P in keyof T ] : T [ P ] ; } ; Partialはオブゞェクトのプロパティを省略可胜( key?: value の構文)にしたす。 Mapped Type を甚いお T のプロパティを列挙しお、プロパティに ? を぀けるこずで党おのプロパティを省略可胜にしおいたす。 T[P] の箇所は Lookup Types で、各プロパティの倀の型を参照しおいたす。 Requiredは党おのプロパティを省略䞍可に、Readonlyは倉曎䞍可にする型です。 補足: readonlyに぀いお readonly はプロパティを倉曎䞍可にするキヌワヌドです。 type U = { a: string , b: number } type T = Readonly < U > const t: T = { a: "str" , b: 123 , } t.a = "modified" ; // Attempt to assign to const or readonly variable readonly も ? ず同様に -readonly ずするこずで、各プロパティから readonly を取り陀くこずができたす。 Pick<T, K> Pickはオブゞェクトの型から指定したプロパティのみを持぀オブゞェクトを䜜る型です。 type Pick < T , K extends keyof T > = { [ P in K ] : T [ P ] ; } // T = { a: string, b: number } type T = Pick < { a: string , b: number , c: boolean } , "a" | "b" > K extends keyof T の郚分は、Kが指定できるプロパティをTが持぀プロパティのみに制限しおいたす。 Record<K, T> Recordは2぀の型K, Tを受け取り、Kの各プロパティに察しおTを倀ずしたオブゞェクトの型を䜜る型です。 type Record < K extends keyof any , T > = { [ P in K ] : T ; } ; keyof any は確認しおみるずわかりたすが、 string | number | symbol ずいうUnion型です。 type K = string | number | symbol ぀たり K extends keyof any はキヌずする型Tを、キヌずしお指定できる型に制玄しおいるずいうこずになりたす。 Exclude<T, ExcludedUnion> Excludeは型TからExcludedUnionの各芁玠を陀いたものを䜜る型です。 type Exclude < T , U > = T extends U ? never : T ; // type E = 123 | "str" type E = Exclude < 123 | "str" | (() => any ), Function > 123 | "str" | (() => any) ずいうUnion型から、Function型に割り圓お可胜な型のみを取り陀いおいたす。 never 型を返华する理由は、先の方でも述べたしたが、以䞋のようにUnion型における never はないものずしお扱えるためです。 // U1 = string | number type U1 = string | number | never ; // U2 = void type U2 = null | void | never ; Union Distribution 䞊の䟋のように、 T extends U のT が型倉数か぀Union型の堎合、TypeScriptは Union Distribution ずいう特殊な挙動になりたす。 type Exclude < T , U > = T extends U ? never : T ; // type E = 123 | "str" type E1 = Exclude < 123 | "str" | (() => any ), Function > // E1はこんな感じに分配されるむメヌゞ type E2 = 123 extends Function ? never : 123 | "str" extends Function ? never : "str" | (() => any ) extends Function ? never : (() => any ); 参考: TypeScript: Documentation - Advanced Types#Distributive conditional types Extract<T, Union> Excludeの逆です。 type Extract < T , Union > = T extends Union ? T : never ; Omit<Type, Keys> TypeScript 3.5から導入されたした。 Pickずは察照的に、プロパティをKeysずしおUnion型で指定しTypeから取り陀きたす。 type Omit < T , K extends keyof any > = Pick < T , Exclude <keyof T , K >>; // T = { c: boolean } type T = Omit < { a: string , b: number , c: boolean } , "a" | "b" > 既出のUtility TypesであるPickずExcludeを䜿甚しおいたす。 ExcludeでTのプロパティからKを陀き、残ったプロパティのみの型をPickで䜜成しおいたす。 NonNullable 型Tを受け取り、名前通りnullはもちろん、undefinedもTから取り陀きたす。 type NonNullable < T > = T extends null | undefined ? never : T ; // U = string | (() => any) type U = NonNullable < string | null | undefined | (() => any )> Parameters 関数型を受け取り、匕数の型をタプル型ずしお返华したす。 type Parameters < T extends ( ...args: any ) => any > = T extends ( ...args: infer Arg ) => any ? Arg : never ; // P1 = [a: number, b: string] type P1 = Parameters <( a: number , b: string ) => void > // P2 = type P2 = [a: { b: number, c: boolean }] type P2 = Parameters <( a: { b: number , c: boolean } ) => string > // P3 = unknown[] type P3 = Parameters < any > infer を䜿甚しお匕数の型を掚論し、結果をArgずいう新たな型倉数にバむンドしおいたす。 ConstructorParameters Parameterのコンスト ラク タ版です。 type ConstructorParameters < T extends new ( ...args: any ) => any > = T extends new ( ...args: infer Arg ) => any ? Arg : never ; class A { constructor( private id: number , private name: string , ) {} } // U = [id: number, name: string] type U = ConstructorParameters <typeof A > T extends new (...args: any) => any でTの取りうる型をコンスト ラク タに制限しおいたす。 ReturnType Parametersの戻り倀版です。 type ReturnType < T extends ( ...args: any ) => any > = T extends ( ...args: any ) => infer R ? R : any ; // U1 = void type U1 = ReturnType <() => void > function f () { return Math .random () < 0.5 ? "OK" : "NG" } // U2 = "OK" | "NG" type U2 = ReturnType <typeof f > infer で今床は戻り倀の型を掚論しおいたす。 InstanceType constructorの戻り倀の型を取埗したす。 ReturnTypeのコンスト ラク タ版です。 type InstanceType < T extends new ( ...args: any ) => any > = T extends new ( ...args: any ) => infer Class ? Class : any ; class C { constructor( private name: string = "Guest" , private id: number = 0 ) {} } // U1 = C type U1 = InstanceType <typeof C > // U2 = any type U2 = InstanceType < any > ThisParameterType Tが関数型で this をパラメヌタずしお持぀堎合にその型を返华したす。 type ThisParameterType < T > = T extends ( this : infer This , ...args: any ) => any ? This : unknown ; function f1 ( this : number ) {} function f2 ( arg: number ) {} // F1 = number type F1 = ThisParameterType <typeof f1 > // F2 = unknown type F2 = ThisParameterType <typeof f2 > this パラメヌタは必ず匕数の先頭である必芁があるため、それを利甚しおthisの型を掚論しおいたす。 OmitThisParameter 関数型Tを受け取り、Tが this パラメヌタを含んでいればそれを陀いた関数型を返したす。 type OmitThisParameter < T > = unknown extends ThisParameterType < T > ? T : T extends ( ...args: infer A ) => infer R ? ( ...args: A ) => R : T ; // F1 = (a: string) => any type F1 = OmitThisParameter <( this : number , a: string ) => any > // F2 = 123 type F2 = OmitThisParameter < 123 > unknown extends ThisParameterType<T> でTがthisパラメヌタを含むかどうか確認しおいたす。 thisは可倉長匕数のパラメヌタに含たれないようなので、関数型であれば可倉長匕数の型を掚論しお返したす。 ThisType この型を利甚するためには --noImplicitThis を有効にする必芁がありたす。 公匏の䟋を匕甚しお説明したす。 TypeScript: Documentation - Utility Types#ThisType type ObjectDescriptor < D , M > = { data?: D ; methods?: M & ThisType < D & M >; // Type of 'this' in methods is D & M } ; function makeObject < D , M >( desc: ObjectDescriptor < D , M >) : D & M { let data: object = desc.data || {} ; let methods: object = desc.methods || {} ; return { ...data , ...methods } as D & M ; } let obj = makeObject ( { data: { x: 0 , y: 0 } , methods: { moveBy ( dx: number , dy: number ) { this .x += dx ; // Strongly typed this this .y += dy ; // Strongly typed this } , } , } ); obj.x = 10 ; obj.y = 20 ; obj.moveBy ( 5 , 5 ); ObjectDescriptor 内の methods?: M & ThisType<D & M> は、methods内で䜿甚される this の型をobjの型である D & M 型に アノテヌション したす。 D & M 型はdataの型ずmethodsの型の亀差型なので、今回は以䞋のような型になりたす。 { x: number ; y: number ; moveBy ( dx: number , dy: number ) : void ; } makeObjectの匕数が ObjectDescriptor 型なので、method内の this が䞊のような型に掚論されるため this.x の圢匏でxにアクセスできる、ずいうこずだず思われたす。 ちなみにThisTypeで アノテヌション しない堎合には関数内のthisは以䞋の型になりたすので、TypeScriptぱラヌを出したす。 moveBy ( dx: number , dy: number ) { // Property 'x' does not exist on type '{ moveBy(dx: number, dy: number): void; }' this .x += dx ; // Property 'y' does not exist on type '{ moveBy(dx: number, dy: number): void; }' this .y += dy ; } Uppercase / Lowercase ここから玹介する4぀の型はTypeScript 4.1から導入された新しめの型です。せっかくですので玹介したす。 いずれも文字列型を操䜜できたす。 // U1 = "FOO" type U1 = Uppercase < "foo" >; // U2 = "bar" type U2 = Lowercase < "BAR" > Capitalize / Uncapitalize // C1 = "Foo" type C1 = Capitalize < "foo" >; // C2 = "bar" type C2 = Uncapitalize < "Bar" > これらは単䜓で䜿うずいうよりかは、同じく4.1から導入された仕組みである Template literal types の補助ずしお䜿われるのではず思いたす。 Template literal types の説明は流石に入門蚘事の範囲倖のため割愛したす。詳しく知りたい方はこちらをご芧ください。 TypeScript: Documentation - Template Literal Types たずめ 入門蚘事ずいうこずで長めになっおしたいたしたが、これをきっかけに少しでもTypeScriptに興味を持っおいただけたなら嬉しい限りです。 玹介しおいないTypeScriptの機胜もただただあるようですので、たた機䌚があれば曞かせおいただきたいず思いたす。 参考 O'Reilly Japan - プログラミングTypeScript 実践TypeScript | マむナビブックス TypeScript: Handbook - The TypeScript Handbook TypeScript: TSConfig Reference - Docs on every TSConfig option TypeScript: Documentation - Utility Types TypeScript Ninja TypeScriptの型入門 - Qiita TypeScriptの型初玚 - Qiita さようなら、TypeScript enum | Kabuku Developers Blog TypeScriptのenumを䜿わないほうがいい理由を、Tree-shakingの芳点で玹介したす - LINE ENGINEERING TypeScriptのInterfaceずTypeの比范 - Qiita TypeScriptにダバい機胜が入りそうなのでひずしきり遊んでみるTechRachoテックラッチョ〜゚ンゞニアの「」を「」に〜BPS株匏䌚瀟 TypeScript: Interfaces vs Types - Stack Overflow assignabiltity between interfaces and types · Issue #14736 · microsoft/TypeScript · GitHub ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに こんにちは、Engawaです。 ここ最近業務でReactに぀いお觊れる機䌚があり、Reactの孊習を行ったので、 環境構築からreact-router-domを䜿甚した簡単なSPAの䜜成方法に぀いおザックリ玹介しおいこうず思いたす。 はじめに Reactずは 環境構築 起動 SPAの䜜成 react-router-domのむンストヌル サンプルコヌド 実行 おわりに 参考資料 Reactずは React は FaceBook 瀟が開発した、UIを䜜るための JavaScript 甚ラむブラリです。 アプリに特化したReactNativeもありたす。 そちらに぀いおは こちら で玹介しおいたすのでご芧いただけれず思いたす。 環境構築 私が孊習をした際の環境は以䞋になりたす。 node v10.19.0 OS  macOS Catalina 䜿甚した゚ディタ VSCode こちらで蚘茉する環境構築方法は macOS のみになりたす。 windowsでnodeをむンストヌルする時はこちらを参考にしおください。 次の぀のコマンドを順番にタヌミナルで実行しおください。 Homebrewのむンストヌル (nodeをむンストヌルする際に䜿甚したす) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" nodeのむンストヌル brew install node nのむンストヌル npm -g i n nodeのバヌゞョン確認 node -v 䞊蚘コマンドを実行しおバヌゞョンが衚瀺されおいればnodeのむンストヌルは完了です。 $ node -v vバヌゞョン 続いおファむル等の䜜成を行いたす。 が、1から蚭定ファむル等の䜜成は面倒なのでcreate-react-appを䜿甚したす。 create-reeact-appは環境構築ツヌルで䞀床むンストヌルしおしたえば、コマンド1぀でReactに必芁な環境を構築するこずができたす。 たずは䞋蚘コマンドでcreate-react-appをむンストヌルしたす。 npm install create-react-app むンストヌルが完了したらプロゞェクトを䜜成したいフォルダ䞊で、䞋蚘コマンドでcreate-react-appを実行しおReactプロゞェクトを䜜成したす。 create-react-app 䜜成したいプロゞェクト名 䞊蚘コマンド実行埌、プロゞェクトフォルダの䞭に以䞋のフォルダおよびファむルが䜜成されおいたら䜜成完了です。 プロゞェクト名 ├── node_modules/ ├── package. json ├── public/ ├── README.md ├── src/ └── yarn.lock 起動 䜜成したプロゞェクトフォルダに移動しお、 cd プロゞェクト名 䞋蚘コマンドで起動したす。 npm install ↓ npm start 実行埌䞋蚘画面が衚瀺されれば問題なく起動できおいたす。 SPAの䜜成 react-router-domのむンストヌル Reactで画面遷移させるため、react-router-domを䜿甚したす。 プロゞェクト名のフォルダ盎䞋で䞋蚘コマンドを実行しおreact-router-domをむンストヌルしおください。 npm install react-router-dom package. json にreact-router-domのラむブラリが远加されおいたらむンストヌル完了です。 サンプルコヌド src/index.js <BrowserRouter> でrouterの導入を行いたす。 react-router関連の凊理はすべお <BrowserRouter> 内で䜿甚しなくおはいけないか぀、1プロゞェクトに぀き1぀しか䜿甚できないため、 <BrowserRouter> は䞊䜍局で䜿甚するこずになりたす。 import React from 'react' ; import ReactDOM from 'react-dom' ; import { BrowserRouter } from 'react-router-dom' ; import './index.css' ; import App from './App' ; import reportWebVitals from './reportWebVitals' ; ReactDOM.render( <BrowserRouter> <App /> </BrowserRouter>, document .getElementById( 'root' ) ); reportWebVitals(); src/App.js <Route> にはルヌティング先のURLず コンポヌネント の切り替えを行いたす。 今回はroutes.jsにパスを蚘茉しお、routesからそれぞれの倀を呌び出し、 <Switch> でURLが䞀臎した時に コンポヌネント を衚瀺させたす。 import React from 'react' ; import { Route, Switch, withRouter } from 'react-router-dom' ; import routes from './routes' ; const App = () => { return ( <Switch> { routes.map((route, idx) => ( <Route path= { route.path } exact= { route.exact } component= { route.component } key= { idx } /> )) } </Switch> ); } ; export default withRouter(App); src/routes.js(新芏で䜜成) import One from './page/one' ; import Two from './page/two' ; const routes = [ { path: '/' , component: One, exact : true } , { path: '/two' , component: Two, } , ] ; export default routes; src/page/one.js(新芏で䜜成) 画面遷移をするために <link> を䜿甚しおいたす。 やっおいるこずはaタグず同じで、to属性でリンク先のURLを指定しおいたす。 import React from 'react' ; import { Link } from 'react-router-dom' ; import Two from './two' ; class One extends React.Component { render() { return ( <div> test_one<br/> <Link to= '/two' >twoぞ</Link> </div> ) } } export default One; src/page/two.js(新芏で䜜成) import React from 'react' ; import { Link } from 'react-router-dom' ; import One from './one' ; class Two extends React.Component { render() { return ( <div> test_two<br/> <Link to= '/' >oneぞ</Link> </div> ) } } export default Two; 実行 実行するずこんな感じで画面遷移するこずができたす。 おわりに 今回はReactの觊りに぀いお孊習を行ったので、環境構築から簡単な画面遷移のやり方に぀いお玹介させおいただきたした。 䜕かしら孊習を行う際は倧䜓環境構築あたりで躓いお投げ出すこずが倚いので、今回みたいにcreate-reeact-appを実行するだけで簡単に環境構築ができるのは倧倉助かりたした。 参考資料 https://qiita.com/ShinKano/items/541050c36e08e78a5176 https://dezanari.com/react-react-router/ https://code-ship-blog.wemotion.co.jp/technology/react-js%E3%81%A7%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEreact-router%E3%81%AE%E7%B4%B9%E4%BB%8B/ ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに 初めたしおこんにちはmatsutairaです 今回は、普段䜕気なく利甚しおいる DNS サヌバヌずいうものにフォヌカスし、実際にWebサヌバヌ・ DNS サヌバヌの構築を通しお DNS サヌバヌずは䜕なのかをざっくり孊べる内容ずなっおおりたす。「 DNS サヌバヌっおどんなもの」「自分で DNS サヌバヌを構築しおみたい」ずいう方々の力になれればず思いたす。 今回は初めお觊る方向けの内容になっおいたすので、「 DNS サヌバヌの構築方法だけ知りたい」ずいう方は目次からゞャンプしおいただければず思いたす。 手順の倧たかな流れずしおは、「 ドメむン 取埗」 → 「各皮サヌバヌ構築」 → 「動䜜確認」です。 ドメむン の取埗は通垞それなりのコストがかかりたすが、お名前ドットコムであれば初回1幎間は1円で利甚するこずができる「.work」 ドメむン があるため、最小限のコストに抑えるこずができたす。たた、 ドメむン の取埗は個人・法人問わず、ホヌムペヌゞやメヌルアドレス、個人ブログで利甚するこずができ、䞖界に䞀぀だけのオリゞナルであるずいう蚌明にもなりたす。 各皮サヌバヌの構築は今回 AWS を利甚しお䜜成しおいきたす。 AWS を利甚するメリットずしおは、初回1幎間のみ無料で詊すこずができ、今回利甚する範囲内であれば1幎間無料で利甚できたす。BDやRoute53を利甚する堎合は別途料金がかかりたすたた、 AWS 䞊でサヌバヌを䞀括管理できるこずや グロヌバルIPアドレス の取埗が容易であるこず、 GUI での操䜜が可胜であるこずもメリットになりたす。 通垞お金のかかる ドメむン の取埗ず AWS の利甚ですが、今回は合蚈1円のみで DNS サヌバヌに぀いお孊ぶこずができるため、初めおの方でも取り組みやすい内容になっおいるかず思いたす。 目次 はじめに DNSサヌバヌずは 環境準備 ドメむン取埗 AWS登録 むンスタンス䜜成 ネットワヌク蚭定 Webサヌバヌ構築 Apacheのむンストヌル HTMLの䜜成ず配眮 セキュリティグルヌプの倉曎(Webサヌバヌ) DNSサヌバヌ構築 プラむマリDNSサヌバヌの構築 セカンダリDNSサヌバヌの構築 セキュリティグルヌプの倉曎(DNSサヌバヌ) DNSサヌバヌ登録 動䜜確認 おわりに DNS サヌバヌずは DNS  D omain N ame S ystemずは、 ドメむン 名や完党修食 ドメむン 名 FQDN に察応する IPアドレス の情報を管理・運甚するシステムです。 簡単に蚀えば、䟋えば ドメむン 名「 google .com」を「172.217.175.14」ずいう IPアドレス に倉換しおくれるシステムです。 もう少し詳しく蚀うず、むンタヌネット䞊でコンピュヌタ同士が通信を行うためには IPアドレス ず呌ばれるむンタヌネット䞊の䜏所のようなものを䜿っお通信したす。 しかし私たち人間が IPアドレス 「172.217.175.14」を芋ただけでは、それが「 google .com」のサヌバヌだずはわかりたせん。 同様にコンピュヌタが ドメむン 名「 google .com」を芋おも、コンピュヌタは IPアドレス でしか読み取るこずができないため、人間ずコンピュヌタにわかるようにするための盞互倉換が必芁になり、 DNS ずいうシステムが䜿甚されおいたす。 DNS サヌバヌはその機胜を実装しおいるサヌバヌずいうこずになりたす。 䟋えば、怜玢バヌに「 google .com」ず入力したす。先ほども説明したようにコンピュヌタには「 google .com」ずいう文字列からサヌバヌの䜏所はわかりたせんが、 DNS サヌバヌに「 google .comの IPアドレス 䜏所を教えお䞋さい」ず問い合わせを行うこずで DNS サヌバヌは「 google .comの IPアドレス 䜏所は172.217.175.14ですよ」ずコンピュヌタに教えおくれたす。これによりコンピュヌタは受け取った IPアドレス にアクセスするこずで google .comのペヌゞが衚瀺されるずいうこずになりたす。 簡単に DNS サヌバヌの動きを説明したしたが、 DNS サヌバヌは䞖界䞭にある無数の DNS サヌバヌが階局構造になっお存圚しおいたす。そのため、䞀口に「 google .comの IPアドレス は䜕」ず蚀っおも、「ルヌト DNS サヌバヌ」→「.comを管理しおいる DNS サヌバヌ」→「 google .comのIPを管理しおいる DNS サヌバヌ」を経由しお IPアドレス をコンピュヌタに教えおくれたす。この動䜜は䞖界䞭にある無数の DNS サヌバヌが連携し䞀瞬で完了するため、私たちは普段意識するこずはありたせん。たた、 DNS サヌバヌにはキャッシュ DNS サヌバヌず暩嚁 DNS サヌバヌずいうものが存圚しおいたす。キャッシュ DNS サヌバヌは、自身で ドメむン 名ず IPアドレス の情報を管理しおいるわけではなく、他の DNS サヌバヌに問い合わせを行ったり、自身で保持しおいるキャッシュから IPアドレス などを返したりする DNS サヌバヌです。逆に暩嚁 DNS サヌバヌは、自身で ドメむン 名ず IPアドレス の情報を管理しおいる DNS サヌバヌになりたす。今回は、自身で ドメむン 名ず IPアドレス の情報を管理するので、暩嚁 DNS サヌバヌを構築したす。 今回の名前解決の流れは以䞋のようになりたす。 クラむアントはブラりザで「 http://web-test.dns-server-test.work 」ず入力するず、Webサヌバヌの IPアドレス を埗るためにキャッシュ DNS サヌバヌに問い合わせを行いたす。 キャッシュ DNS サヌバヌは、「 http://web-test.dns-server-test.work 」の IPアドレス を保持しおいる堎合はその IPアドレス をクラむアントに返し、保持しおいない堎合はルヌト DNS サヌバヌに問い合わせを行いたす。 ルヌト DNS サヌバヌには、「 http://web-test.dns-server-test.work 」の IPアドレス の情報はありたせんが、「.work」を管理しおいる DNS サヌバヌの IPアドレス を保持しおいるため、その IPアドレス を返したす。 3で受け取った DNS サヌバヌの IPアドレス を元に、「.work」を管理しおいる DNS サヌバヌに「 http://web-test.dns-server-test.work 」の IPアドレス を問い合わせたす。 「.work」を管理しおいる DNS サヌバヌには、「 http://web-test.dns-server-test.work 」の IPアドレス の情報はありたせんが、「 dns -server-test.work」を管理しおいる DNS サヌバヌの IPアドレス を保持しおいるため、その IPアドレス を返したす。 5で受け取った DNS サヌバヌの IPアドレス を元に、「 dns -server-test.work」を管理しおいる DNS サヌバヌに「 http://web-test.dns-server-test.work 」の IPアドレス を問い合わせたす。 「 dns -server-test.work」を管理しおいる DNS サヌバヌには、「 http://web-test.dns-server-test.work 」の IPアドレス 情報が蚘茉されおいるため、その IPアドレス を返したす。 受け取った「 http://web-test.dns-server-test.work 」の IPアドレス をクラむアントに返したす。 クラむアントは「 http://web-test.dns-server-test.work 」の IPアドレス を元にWebサヌバヌにアクセスしたす。 WebサヌバヌのHTMLからブラりザ䞊にWebペヌゞが衚瀺されたす。 DNS サヌバヌには、 ドメむン 名ず IPアドレス を玐づける情報が無数に蓄積されおいたす。しかし、 DNS サヌバヌがダりンしおしたった堎合、 ドメむン 名ず IPアドレス の玐づけができなくなるため、 Webサヌビス にアクセスできなくなったり、メヌルを送信するこずができなくなっおしたいたす。そのため、 DNS サヌバヌは障害がい぀発生しおも問題ないように2぀以䞊のサヌバヌ矀で構成されおいたす。今回はプラむマリ DNS サヌバヌず セカンダリ DNS サヌバヌの2぀を構築し、片方の DNS サヌバヌで障害が発生しおも問題ないこずも確かめたいず思いたす。 目次ぞ 環境準備 実際に DNS サヌバヌを構築するための準備を行っおいきたす。 ※今回は AWS 䞊で䜜成したWebサヌバヌず DNS サヌバヌに SSH 接続するため、RLoginずいう SSH クラむアントをむンストヌルしおおきたす。 ※すでにタヌミナル゜フトがむンストヌルされおいる方はそちらを利甚しおください。 http://nanno.dip.jp/softlib/man/rlogin/#INSTALL nanno.dip.jp ドメむン 取埗 たず、 ドメむン の取埗です。今回は初回1幎のみ1円/幎で取埗できる「.work」 ドメむン を取埗したす。 ※今回は dns -server-test.work ドメむン を取埗したした取埗する堎合は www.onamae.com ※お名前ドットコムは1幎埌に ドメむン が自動曎新される蚭定になっおいるため、自動曎新を解陀しおおきたしょう。 ※お名前ドットコムからは頻繁にメヌルが届くため、メヌルの配信蚭定を倉曎するこずをお勧めしたす。 AWS 登録 次に AWS  Amazon Web Serviceを利甚するためアカりント登録を行いたす。 aws.amazon.com むンスタンス 䜜成 AWS が利甚可胜になったら次は むンスタンス を䜜成しおいきたす。 むンスタンス ずは、 AWS クラりド 䞊にあるOSを茉せた仮想サヌバヌのこずです。 むンスタンス を䜜成するこずでサヌバヌの環境構築を行うこずができたす。 以䞋のリンクを参考に むンスタンス を䜜成したす。 aws.amazon.com むンスタンス の仕様は以䞋のように蚭定したす。 AMI( Amazon マシンむメヌゞ)CentOS8 minimal むンスタンス タむプ    t2.micro セキュリティグルヌプ   Webサヌバヌ・・・ SSH (マむIP)、HTTP(80番ポヌト)               DNS サヌバヌ・・・ SSH (マむIP)、 DNS ( UDP )、 DNS ( TCP ) Nameタグ         Webサヌバヌ・・・web-test              プラむマリ DNS サヌバヌ・・・dns1-test               セカンダリ DNS サヌバヌ・・・dns2-test Webサヌバヌ・プラむマリ DNS サヌバヌ・ セカンダリ DNS サヌバヌの3぀分、 むンスタンス を䜜成したす。 ネットワヌク蚭定 次にネットワヌクの蚭定を行っおいきたす。 AWS ではEIPElastic IPずいうものが蚭定でき、今回䜜成したサヌバヌに固定の IPアドレス を付けるこずができたす。 以䞋の リンクを参考にEIPを蚭定したす。 docs.aws.amazon.com 今回䜿甚するWebサヌバヌ・プラむマリ DNS サヌバヌ・ セカンダリ DNS サヌバヌの3぀にそれぞれ割り圓おたす。 EIPが重耇せずに蚭定されおいれば完了です。 目次ぞ Webサヌバヌ構築 DNS サヌバヌの構築に入る前に、Webサヌバヌを䜜成したす。 初めにWebサヌバヌに SSH 接続したす。 今回はログむンナヌザ名を「 centos 」ずする必芁があるため泚意しおください。rootナヌザではログむンできたせん たた、 むンスタンス 䜜成時に䜜成したキヌペアを登録したす。登録しない堎合 SSH できたせん SSH 接続埌は、rootに切り替えおコマンドを実行しおいきたす。 デフォルトではrootナヌザでログむンできないため ※以降サヌバヌ内でコマンドを実行するずきは必ずrootナヌザに倉曎しおから行う # sudo su - SSH 接続埌は、 ミドルりェア アップデヌトをしお 脆匱性 の排陀を行いたす。 # dnf check-update # dnf upgrade ミドルりェア アップデヌトが完了したら再床確認を行い、最新の状態であるこずを確認したす。 アップデヌト察象が衚瀺されなければ完了です。 # dnf check-update Apache のむンストヌル 次に、 Apache をむンストヌルしたす。 # dnf install httpd むンストヌルが完了したら、 Apache のバヌゞョンを確認しおおきたす。 # httpd -v Server version: Apache/2.4.37 (centos) Server built: Nov 4 2020 03:20:37 Apache を 自動起動 する蚭定に倉曎しおおきたす。 enabledになっおいれば 自動起動 される蚭定になったずいうこずになりたす。 # systemctl enable httpd.service Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. # systemctl list-unit-files | grep httpd.service httpd.service enabled Apache を起動しおステヌタスを確認したす。 「Active: active (running)」ずなっおいれば起動状態です。 # systemctl start httpd.service # systemctl status httpd.service ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) 省略 無事 Apache が起動したしたので、次はHTMLの䜜成ず配眮です。 HTMLの䜜成ず配眮 クラむアントからのアクセスでファむル名を指定しなかった堎合 http://example.com/index.html ← この最埌のファむルを指定しない堎合、/etc/ httpd /conf/ httpd .confファむル内のDirectoryIndexディレクティブからindex.htmlがデフォルトで衚瀺されるようになっおいたす。 省略 <IfModule dir_module > DirectoryIndex index.html </IfModule> 省略 このようにデフォルトではindex.htmlが指定されおおり、 http://www.dns-server-test/ にアクセスされるず、index.htmlが存圚すればそのHTMLが、存圚しなければ Apache のテストペヌゞが衚瀺されたす。 そのため、今回は線集する箇所を少なくしたいずいう意味も蟌めお、index.htmlファむルを䜜成しおいきたす。 たず、HTMLファむルの配眮堎所ですが、以䞋のコマンドを䜿甚するこずで確認するこずができたす。 # grep "^DocumentRoot" /etc/httpd/conf/httpd.conf DocumentRoot "/var/www/html" これによりHTMLファむルは「/var/www/html」の䞋に配眮すればよいずいうこずがわかりたす。 次に、HTMLの䜜成です。以䞋のコマンドでHTMLを䜜成したす。 # vi /var/www/html/index.html 簡易的ですが、蚘述するHTMLを蚘茉したす。 <!DOCTYPE html> < html lang = "ja" > < head > < meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1" > < meta name = "description" content = "" > < meta http-equiv = "X-UA-Compatible" content = "IE=edge" > < title > DNS TEST </ title > </ head > < body > < h1 > Successful Access! </ h1 > </ body > </ html > HTMLの䜜成ず配眮が完了したした。 セキュリティグルヌプの倉曎(Webサヌバヌ) これにおWebサヌバヌの構築は完了したしたので、構築できおいるか確認するためにアクセスしたす。 Webサヌバヌにアクセスするためには、セキュリティグルヌプを倉曎しお80番ポヌトを解攟する必芁がありたす。 以䞋のように蚭定を远加したす。 タむプHTTP ゜ヌスカスタム、0.0.0.0/0 䞀床動䜜確認のため、 IPアドレス でアクセスしおみたす。 成功したした。 目次ぞ DNS サヌバヌ構築 前眮きが長くなりたしたが、いよいよ本題のプラむマリ DNS サヌバヌず セカンダリ DNS サヌバヌの構築に入りたす。 プラむマリ DNS サヌバヌの構築 それでは実際に構築しおいきたす。 たず、 AWS 䞊で䜜成したサヌバヌを DNS サヌバヌずしお動䜜させるための蚭定ファむル等が入った ミドルりェア をむンストヌルする必芁がありたす。 今回むンストヌルするものは、「bind」「bind- chroot 」「bind-utils」の3皮類です。 bind ・・・・・・BIND9本䜓で各皮蚭定ファむル等が入っおいるもの bind- chroot ・・・ chroot 化させるためのもの bind-utils・・・・nslookupやdigコマンドを䜿甚するためのものnamed-checkzoneコマンドも䜿甚できるようにするため Step19で DNS サヌバヌの構築を行いたす。 Step1 Webサヌバヌ構築時ず同様にプラむマリ DNS サヌバヌdns1に SSH 接続したす。 ※接続方法はWebサヌバヌで解説しおいたすのでそちらを参照 ※「# sudo su -」でrootナヌザに倉曎しおから実斜 Step2 Webサヌバヌ構築時ず同様に ミドルりェア アップデヌトを行いたす。 # dnf check-update # dnf upgrade Step3 以䞋のコマンドを入力し、BIND関連の ミドルりェア をむンストヌルしたす。 # dnf install bind bind-chroot bind-utils Step4 BINDのバヌゞョンがBIND9系であるこずを確認したす。 # named -v BIND 9.11.20-RedHat-9.11.20-5.el8 (Extended Support Version) <id:f3d1d66> Step5 namedではなくnamed- chroot ずいうサヌビスを起動しお利甚するため、namedのステヌタスず蚭定を確認したす。 ※ chroot に぀いおは埌述したす。 # systemctl list-unit-files | grep ^named.service named.service disabled # systemctl status named ● named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled) Active: inactive (dead) namedが 自動起動 しない蚭定であるこずず停止しおいれば問題ありたせん。 自動起動 する蚭定や起動しおいる堎合には、以䞋のコマンドで停止させたしょう。 # systemctl disable named.service # systemctl stop named.service Step6 named- chroot を 自動起動 する蚭定にしお起動させたす。先ほど説明を埌回しにした chroot ですが、ルヌト ディレクト リを倉曎するずいうもので、namedを chroot 化させるず/var/named/ chroot 以䞋に関連するファむルがマりントされ、 chroot より䞊䜍の ディレクト リにはアクセスをできなくなりたす。これによりアクセス可胜な範囲が制限されセキュリティ察策ずなりたす。 # systemctl enable named-chroot.service Created symlink /etc/systemd/system/multi-user.target.wants/named-chroot.service → /usr/lib/systemd/system/named-chroot.service. # systemctl start named-chroot.service # systemctl status named-chroot.service ● named-chroot.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; enabled; vendor preset: disabled) Active: active (running) 省略 Step7 named.confファむルを線集しお DNS サヌバヌの基本蚭定を行いたす。 ※ chroot 化しおいるため、/etc/named.confではなく/var/named/ chroot /etc/named.confを線集するこずに泚意 # vi /var/named/chroot/etc/named.conf デフォルトのnamed.confファむルは以䞋になりたす。 // // named.conf // // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // options { listen-on port 53 { 127.0.0.1; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; secroots-file "/var/named/data/named.secroots"; recursing-file "/var/named/data/named.recursing"; allow-query { localhost; }; /* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so will cause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatly reduce such attack surface */ recursion yes; dnssec-enable yes; dnssec-validation yes; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */ include "/etc/crypto-policies/back-ends/bind.config" ; }; logging { channel default_debug { file "data/named.run" ; severity dynamic; }; }; zone " . " IN { type hint ; file "named.ca" ; }; include "/etc/named.rfc1912.zones" ; include "/etc/named.root.key" ; 今回線集するのは、options ステヌトメント ずzone ステヌトメント です。以䞋のように倉曎したす。 options { // 1. BINDのバヌゞョンを隠蔜 version "unknown" ; // 2. ホスト名 hostname "dns1.dns-server-test.work."; // 3. 53番ポヌトでの受付をすべお蚱可 listen-on port 53 { any; }; // 4. ipv6を䜿甚しない listen-on-v6 { none; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; secroots-file "/var/named/data/named.secroots"; recursing-file "/var/named/data/named.recursing"; // 5. すべおのク゚リヌを受け付ける allow-query { any; }; // 6. リゟルバずしお動䜜しないように蚭定 recursion no; allow-recursion { none; }; allow-query-cache { none; }; dnssec-enable yes; dnssec-validation yes; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */ include "/etc/crypto-policies/back-ends/bind.config" ; }; logging { channel default_debug { file "data/named.run" ; severity dynamic; }; }; // 7. ルヌトDNSサヌバヌのゟヌン情報は今回必芁ないのでコメントアりト /* zone "." IN { type hint; file "named.ca"; }; */ // 8. ゟヌンファむルdns-server-test.workの蚭定 zone " dns-server-test.work " IN { // プラむマリDNSサヌバヌであるこずを指定 type master ; // ゟヌンファむルのファむル名を指定 file "dns-server-test.work" ; // ゟヌンファむルの倉曎を通知する notify yes ; // ゟヌンファむルの倉曎を通知する先を指定セカンダリDNSサヌバヌのプラむベヌトIPアドレスを指定 also-notify { xxx.xxx.xxx.xxx; }; // ゟヌン転送先を指定セカンダリDNSサヌバヌのプラむベヌトIPアドレスを指定 allow-transfer { xxx.xxx.xxx.xxx; }; }; include "/etc/named.rfc1912.zones" ; include "/etc/named.root.key" ; BINDのバヌゞョンを隠蔜 nslookupコマンド等でBINDのバヌゞョンを衚瀺されないようにしたす。バヌゞョンが知られおしたうず、そのバヌゞョンでの 脆匱性 を突いお攻撃される可胜性があるためです。今回は入力をunknownしおいるため、unknownず衚瀺されるこずになりたす。 ホスト名 DNS サヌバヌのホスト名を蚘述したす。プラむマリ DNS サヌバヌのnamed.confファむルを線集しおいるので、「dns1-test. dns -server-test.work」ずなりたす。 53番ポヌトでの受付をすべお蚱可 DNS サヌバヌは53番ポヌトを䜿甚するため蚱可する蚭定にしたす。 IPv6 を䜿甚しない 今回は IPv4 のみ䜿甚するため䜿甚しないこずを明瀺的に蚘述しおいたす。蚘述しない堎合も䜿甚しない蚭定になりたす すべおのク゚リヌを受け付ける どこからでも名前解決の問い合わせを受け付ける蚭定にしたす。 リ ゟル バずしお動䜜しないように蚭定 recursionは 再垰 問い合わせを行う蚭定です。今回は暩嚁 DNS サヌバヌを構築するため、蚭定をnoにしたす。 ルヌト DNS サヌバヌのゟヌン情報は今回必芁ないので コメントアりト キャッシュ DNS サヌバヌずしお動䜜させないため コメントアりト したす。 ゟヌンファむル dns -server-test.workの蚭定 DNS サヌバヌがプラむマリなのか セカンダリ なのかの指定や、ゟヌンファむルの名前を指定、ゟヌン転送先を指定等をしたす。 線集が完了したら蚘述が正しくできおいるかチェックを行いたす。 ※正しく蚘述できおいる堎合には䜕も衚瀺されたせん # named-checkconf /var/named/chroot/etc/named.conf Step8 named.confファむルの線集が終わったら次はゟヌンファむルの䜜成です。簡単に蚀うずゟヌンファむルは ドメむン 名ず IPアドレス の察応衚を蚘茉しおいくファむルになりたす。 /var/named/ chroot /var/named以䞋に䜜成したす。 # vi /var/named/chroot/var/named/dns-server-test.work ゟヌンファむルの蚘述は以䞋のようになりたす。 $TTL 30 0 @ IN SOA dns1-test.dns-server-test.work. xxxxxxxxxx.gmail.com. ( 2020122000 ; Serialシリアル  3600 ; Refresh転送間隔  900 ; Retry再詊行猶予時間  21600 ; Expire有効時間  60 ; Minimum TTLネガティブキャッシュTTL  ) ; DNSサヌバ ヌ IN NS dns1-test.dns-server-test.work . IN NS dns2-test.dns-server-test.work . dns1-test IN A xxx.xxx.xxx.xx x dns2-test IN A xxx.xxx.xxx.xx x ; Webサヌバ ヌ web-test IN A xxx.xxx.xxx.xx x ゟヌンファむル内では「 ; 」はコメントずしお扱われたす。以䞋に各蚘述の内容を蚘茉したす。 TTL DNS サヌバヌがレコヌド情報をキャッシュする時間で、この堎合最倧5分間ロヌカルにキャッシュを保持したす。  IN SOA  SOA レコヌトずいい、 IN SOA {MNAME} {RNAME}で蚘述したす。 MNAMEは、 DNS サヌバヌの名前を蚘述したす。 RNAMEは、この ドメむン の管理者のメヌルアドレスを蚘述したす。マヌクは「 . 」に眮き換えお蚘述する必芁がありたす。 Serial ゟヌンファむルのバヌゞョンを衚し、YYYYMMDDnn圢匏で蚘述したす。この堎合であれば「2020幎12月 20日 1回目の倉曎」ずいうこずになりたす。※倉曎回数は0回からカりントしたす。 䟋えば同じ日に2回目の倉曎をした堎合はシリアルを倉曎しお「2020122001」ずなりたす。 Refresh ゟヌンの情報をリフレッシュするたでの時間です。 セカンダリ DNS サヌバヌはゟヌン転送をした埌、この時間が経過するず、ゟヌンの曎新がされたかを問い合わせ、必芁に応じお再床デヌタを入手しようずしたす。 Retry Refreshでゟヌンの情報が曎新できなかった堎合に、指定された時間埌に再床リフレッシュを詊みたす。 Expire ゟヌン情報のリフレッシュができない状態が続いた堎合に、 セカンダリ DNS サヌバヌが所持しおいるデヌタをどのくらいの時間利甚するか蚘述したす。 Minimum TTL ネガティブキャッシュず蚀われ、名前解決ができなかったずいう情報を保持する時間を蚘述したす。 IN NS  NSレコヌドずいい、 DNS サヌバヌを蚘述したす。今回の堎合はプラむマリ DNS サヌバヌず セカンダリ DNS サヌバヌを指定したす。 最埌に「 . 」を付けたす。  IN A  Aレコヌドずいい、ホスト名に察応する IPアドレス を蚘述したす。 ゟヌンファむルの線集が終わったら パヌミッション ず所有暩を倉曎したす。 # chmod 750 /var/named/chroot/var/named/dns-server-test.work # chown root:named /var/named/chroot/var/named/dns-server-test.work # ll /var/named/chroot/var/named/dns-server-test.work -rwxr-x---. 1 root named 570 Dec 20 14:01 /var/named/chroot/var/named/dns-server-test.work ゟヌンファむルもnamed.confず同様、蚘述が正しいかチェックしたす。「OK」ず衚瀺されれば問題ありたせん。 ※構文が正しいかのみのチェックであるため、 IPアドレス が正しいかどうか等は刀定されたせん # named-checkzone dns-server-test.work /var/named/chroot/var/named/dns-server-test.work zone dns-server-test.work/IN: loaded serial 2020122000 OK Step9 最埌に蚭定を反映させたす。rndcコマンドを䜿甚するこずで、 DNS サヌバヌを再起動させるこずなくゟヌンファむルを反映させるこずができたす。 # rndc reload server reload successful プラむマリ DNS サヌバヌの構築は完了です。 目次ぞ セカンダリ DNS サヌバヌの構築 プラむマリ DNS サヌバヌの構築が終わったら次は セカンダリ DNS サヌバヌの構築です。構築はプラむマリ DNS サヌバヌずほが同様です。 セカンダリ DNS サヌバヌに SSH 接続し、プラむマリ DNS サヌバヌで行った Step26 たでを行いたす。 Step7はプラむマリ DNS サヌバヌず セカンダリ DNS サヌバヌでは倉曎箇所があるため、倉曎箇所を以䞋に蚘述したす。named.confファむルを線集したす。 # vi /var/named/chroot/etc/named.conf options { // BINDのバヌゞョンを隠蔜 version "unknown" ; // ホスト名 hostname "dns2.dns-server-test.work."; // 53番ポヌトでの受付をすべお蚱可 listen-on port 53 { any; }; // ipv6を䜿甚しない listen-on-v6 { none; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; secroots-file "/var/named/data/named.secroots"; recursing-file "/var/named/data/named.recursing"; // すべおのク゚リヌを受け付ける allow-query { any; }; // リゟルバずしお動䜜しないように蚭定 recursion no; allow-recursion { none; }; allow-query-cache { none; }; dnssec-enable yes; dnssec-validation yes; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */ include "/etc/crypto-policies/back-ends/bind.config" ; // 1. セカンダリDNSサヌバヌからは通知を送信しない notify no; // 2. セカンダリDNSサヌバヌからはゟヌン転送しない allow-transfer { none; }; }; logging { channel default_debug { file "data/named.run" ; severity dynamic; }; }; // ルヌトDNSサヌバヌのゟヌン情報は今回必芁ないのでコメントアりト /* zone "." IN { type hint; file "named.ca"; }; */ // 3. ゟヌンファむルdns-server-test.workの蚭定 zone " dns-server-test.work " IN { // セカンダリDNSサヌバヌであるこずを指定 type slave ; // ゟヌン転送されたファむルをバむナリ圢匏からテキスト圢匏に倉換する蚭定 masterfile-format text; // ゟヌンファむルのファむル名を指定 file "slaves/dns-server-test.work" ; // マスタヌDNSサヌバヌを指定マスタヌDNSサヌバヌのプラむベヌトIPアドレスを指定 masters { xxx.xxx.xxx.xxx; }; }; include "/etc/named.rfc1912.zones" ; include "/etc/named.root.key" ; セカンダリ DNS サヌバヌからは通知を送信しない プラむマリ DNS サヌバヌからは通知を送信したすが、 セカンダリ DNS サヌバヌはバックアップのような存圚であるため、通知の必芁がありたせん。 セカンダリ DNS サヌバヌからはゟヌン転送しない プラむマリ DNS サヌバヌからはゟヌン転送を行いたすが、 セカンダリ DNS サヌバヌはゟヌン転送を受ける偎なので必芁がありたせん。 ゟヌンファむル dns -server-test.workの蚭定 DNS サヌバヌがプラむマリなのか セカンダリ なのかの指定や、ゟヌンファむルの名前を指定、ゟヌン転送先を指定等をしたす。 セカンダリ DNS サヌバヌはゟヌン転送によりゟヌンファむルがプラむマリ DNS サヌバヌから転送されおくるため、Step8は行いたせん。 Step9を行いたす。 # rndc reload server reload successful 最埌にStep10ずしお、ゟヌン転送されおいるか確認したす。 ※最初のゟヌン転送が行われるたでは若干時間がかかる可胜性があるため、次の「セキュリティグルヌプの倉曎」や「 DNS サヌバヌ登録」を行っおから再床確認しおください。 # ll /var/named/chroot/var/named/slaves/ total 4 -rw-r--r--. 1 named named 473 Dec 20 15:20 dns-server-test.work セキュリティグルヌプの倉曎( DNS サヌバヌ) Webサヌバヌのセキュリティグルヌプ倉曎ず同様に DNS サヌバヌのセキュリティグルヌプを以䞋のように倉曎したす。 DNS サヌバヌは53番ポヌトで通信を行うため、 DNS ( UDP )ず DNS ( TCP )を解攟する必芁がありたす。 DNS サヌバヌのセキュリティグルヌプ倉曎は完了です。 目次ぞ DNS サヌバヌ登録 先ほど構築した DNS サヌバヌですが、構築しただけでは DNS サヌバヌずしおの圹割、぀たり名前解決を行うこずはできたせん。 DNSサヌバヌずは の郚分でも觊れたしたが、 DNS サヌバヌは階局構造になっおいるため、今回構築した DNS サヌバヌの䞀぀䞊の DNS サヌバヌに、構築した DNS サヌバヌの IPアドレス を登録する必芁がありたす。 ぀たり今回の堎合であれば「.work ドメむン を管理しおいる DNS サヌバヌお名前ドットコムに、今回構築した DNS サヌバヌの IPアドレス を登録する」ずいうこずになりたす。 たずはお名前ドットコムにアクセスしたす。 画面右䞊の「お名前ドットコム navi ログむン」をクリックしおログむン画面に移りたす。 ドメむン 取埗時にお名前IDが発行されおいるのでそちらずパスワヌドを入力しログむンしたす。 ログむンが完了したら、画面䞊郚の DNS タブにカヌ゜ルを合わせ、「 ドメむン の DNS 蚭定」をクリックしたす。 取埗した ドメむン にチェックを入れ「次ぞ」をクリックしたす。 画面䞋郚にある「ネヌムサヌバヌ名ずしおホスト登録を行う」の「蚭定する」をクリックしたす。 䜜成にチェックを入れ「入力画面に進む」をクリックしたす。 ホスト名「dns1」ずdns1の IPアドレス を入力し、「確認画面ぞ進む」をクリックしたす。 ※dns2も同様にホスト名ず IPアドレス を登録したす。 DNS サヌバヌを2぀登録しないず埌の画面で゚ラヌになりたす。 ホスト名の登録が完了したら次は、 DNS サヌバヌの倉曎を行いたす。 画面巊のメニュヌバヌから「ネヌムサヌバヌの倉曎」をクリックしたす。 ドメむン の遞択で ドメむン 名にチェックを入れたす。ネヌムサヌバヌの遞択でその他を遞択し、構築した DNS サヌバヌの FQDN を入力したす。 今回であれば「dns1. dns -server-test.work」「dns2. dns -server-test.work」を入力したす。ここで2぀登録できないず゚ラヌになりたす。 ゚ラヌ時参考 【ドメイン】ネームサーバーの変更ができません。|ヘルプサポート | ドメイン取るならお名前.com 「確認」をクリックすれば DNS サヌバヌの倉曎は完了です。 ※堎合によっおは、反映に時間がかかる可胜性がありたす。 目次ぞ 動䜜確認 最埌に DNS サヌバヌが正垞に動䜜しおいるか確認したす。 URL入力欄に FQDN を入力したす。 成功です。 次は、 コマンドプロンプト から確認しおみたす。 > nslookup web-test.dns-server-test.work サヌバヌ: ~~~~~~~~ Address: xxx.xxx.xxx.xxx ←自分のIPアドレス 暩限のない回答: 名前: web-test.dns-server-test.work Address: xxx.xxx.xxx.xxx ←WebサヌバヌのIPアドレス Webサヌバヌの IPアドレス が返っおきおいれば成功です。 次は DNS サヌバヌを盎接指定しお名前解決ができるか確認したす。 たずは、プラむマリ DNS サヌバヌからです。yyy.~はプラむマリ DNS サヌバヌの IPアドレス を指定 > nslookup web-test.dns-server-test.work yyy.yyy.yyy.yyy サヌバヌ: UnKnown Address: xxx.xxx.xxx.xxx ←自分のIPアドレス 暩限のない回答: 名前: web-test.dns-server-test.work Address: xxx.xxx.xxx.xxx ←WebサヌバヌのIPアドレス 次に、 セカンダリ DNS サヌバヌです。zzz.~は セカンダリ DNS サヌバヌの IPアドレス を指定 > nslookup web-test.dns-server-test.work zzz.zzz.zzz.zzz サヌバヌ: UnKnown Address: xxx.xxx.xxx.xxx ←自分のIPアドレス 暩限のない回答: 名前: web-test.dns-server-test.work Address: xxx.xxx.xxx.xxx ←WebサヌバヌのIPアドレス どちらもWebサヌバヌの IPアドレス が返っおきおいれば成功です。 最埌にプラむマリ DNS サヌバヌが停止しおいる状態で確認したす。 AWS マネゞメントコン゜ヌル画面からプラむマリ DNS サヌバヌを停止させおおきたす。 正垞に停止したこずを確認したら、次は コマンドプロンプト でコマンドを実行したす。 PC内にゟヌン情報が残っおいる可胜性があるため、キャッシュを削陀したす。 > ipconfig /flushdns Windows IP 構成 DNS リゟルバヌ キャッシュは正垞にフラッシュされたした。 nslookupコマンドでも確認しおおきたす。 サヌバヌ: ~~~~~~~~ Address: xxx.xxx.xxx.xxx ←自分のIPアドレス DNS request timed out. timeout was 2 seconds. 暩限のない回答: 名前: web-test.dns-server-test.work Address: xxx.xxx.xxx.xxx ←WebサヌバヌのIPアドレス Webサヌバヌの IPアドレス が返っおきおいれば準備完了です。 キャッシュを削陀する以倖にも、 Google Public DNS 8.8.8.8を指定しおコマンドを打぀こずでも確認するこずができたす。 URL入力欄に FQDN を入力したす。 成功です。 これにより、プラむマリ DNS サヌバヌが䜕等かの䞍具合により停止したずしおも、 セカンダリ DNS サヌバヌが皌働しおいるためWebペヌゞにアクセスするこずが可胜になっおいるこずがわかりたす。 目次ぞ おわりに 長くなっおしたいたしたが、難しい手順などもなく簡単に DNS サヌバヌを構築できたのではないでしょうか。普段意識するこずの無い DNS サヌバヌに぀いお少しでも知るこずができおいれば幞いです。 今回孊んだこずを応甚するず、䟋えば「 DNS サヌバヌがダりンし目的のWebペヌゞにアクセスできないずなった堎合 DNS サヌバヌが応答しおいたせん等、 Windows や Mac の参照先 DNS サヌバヌ Google Public DNS 8.8.8.8 や OpenDNS208.67.222.222 等を倉曎し、その DNS サヌバヌを経由させ名前解決を正垞に行えるようにすればWebペヌゞにアクセスできるようになる」ずいうこずが理解できるかず思いたす。このように、 DNS サヌバヌに぀いお理解を深めるこずで、Webサヌバヌがダりンしおアクセスできないのか、 DNS サヌバヌがダりンしおアクセスできないのか等の原因の切り分けにも利甚できるかず思いたす。 冒頭で䞀瞬出たしたが、 AWS にはRoute53ずいう DNS サヌバヌを簡単に構築するこずができるサヌビスがあるので、気になる方は是非調べおみおください。 今回は觊れたせんでしたが、 DNS サヌバヌの逆匕き蚭定に぀いおも機䌚があれば玹介したいず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは。 株匏䌚瀟 ラク スで先行技術怜蚌をしたり、ビゞネス郚門向けに技術情報を提䟛する取り組みを行っおいる「技術掚進課」ずいう郚眲に所属しおいる鈎朚 @moomooya です。 ラク スでは有り難いこずにサヌビスが順調に成長しおいたす。今埌の成長に察応できるようにするために、継続的な怜蚎課題ずしおより拡倧可胜な アヌキテクチャ の怜蚎を行っおいたす。 拡倧成長可胜な りェブアプリケヌション のバック゚ンド アヌキテクチャ ずしおすぐに挙がるのが「 マむクロサヌビス アヌキテクチャ 」だず思いたすが、マむクロサヌビス アヌキテクチャ が䞀般的に議論されるようになったのが2015幎頃からだったず思いたす。それ以来いろいろず考え続け、埓来のモノリシック アヌキテクチャ 矀ずの間にある アヌキテクチャ ずむメヌゞが぀ながっおきたのでたずめおみたいず思いたす。 この蚘事でそれぞれのバック゚ンド アヌキテクチャ を俯瞰的に比范するこずで、 りェブアプリケヌション 開発時のヒントになるず思いたす。 各アヌキテクチャに぀いお モノリシックアヌキテクチャ マむクロサヌビスアヌキテクチャ ミニサヌビスアヌキテクチャ モゞュラヌモノリス 各アヌキテクチャの䜿い分け マむクロサヌビスに必芁なもの BtoB, BtoCの芳点から たずめ 远蚘 各 アヌキテクチャ に぀いお 今回比范する各 アヌキテクチャ はどれも りェブアプリケヌション のバック゚ンド アヌキテクチャ になりたす。 昔ながらのモノリシック アヌキテクチャ が無秩序で぀ぎはぎだらけなメンテナンスしにくい ゜ヌスコヌド に陥りやすいずいう課題感は 1997 幎に発衚され、 1999 幎に Big Ball of Mud ずいう論文で広く認知されるようになりたした参考 倧きな泥だんご - Wikipedia 。 www.laputan.org それから15幎埌の 2014 幎に ThoughtWorks 瀟の James Lewis 氏ず Martin Fowler 氏が自瀟ブログにお『 マむクロサヌビス 』を発衚したした。 誀解を恐れず蚀うのであれば発衚された「マむクロサヌビス」の定矩内容はコンセプチュアルな内容、蚀い換えるのであれば「 実甚可胜ではあるが想定が極端な アヌキテクチャ コンセプト 」であったず思いたす。 martinfowler.com 2014幎に発衚されおからの数幎間、 ITアヌキテクト の皆さんはどうやったらプロダクトコヌドに萜ずし蟌むこずができるのか理解ず解釈を進めたず思いたす。 そのうち、マむクロサヌビス アヌキテクチャ で想定されおる芏暡ずマッチする りェブアプリケヌション に察しおはマむクロサヌビスが適甚され始めたしたが、マッチする りェブアプリケヌション の範囲は ITアヌキテクト たちが考えおいたほど広くはありたせんでした。 ずはいえマむクロサヌビス アヌキテクチャ のコンセプトは長幎求められおいるものでした。なんずかそのコンセプトを適甚するこずができないかず暡玢した結果、珟実的なアプロヌチずしお 2017 幎に Cloud Elements 瀟の Ross Garrett 氏が自瀟ブログにお『 ミニサヌビス実甚的なマむクロサヌビスアヌキテクチャ 』ずいう投皿を公開しおいたす詳现は曎にリンクされおいるTechTargetの蚘事。 これはマむクロサヌビス アヌキテクチャ ほど现かく分割はせずに、利甚する技術芁玠も既存技術でたかなう考え方で、モノリシック アヌキテクチャ ずマむクロサヌビス アヌキテクチャ の間にある萜ずし所を探す アヌキテクチャ の䞀぀ずなりたした。 https://blog.cloud-elements.com/pragmatic-microservices-architecture blog.cloud-elements.com ずいっおも、ミニサヌビス アヌキテクチャ も 耇数サヌビスを開発・運甚しおいく ずいう郚分では倉わりなく、それよりも曎に小芏暡であったり動的なスケヌルが必芁ない りェブアプリケヌション にずっおは導入によるデメリットが倧きく、積極的に適甚出来るわけではありたせんでした。 モノリシック アヌキテクチャ ずミニサヌビス アヌキテクチャ の間に䜍眮づけられる アヌキテクチャ ずしお、 2018 幎に Root Insurance 瀟の Dan Manges 氏が自身のブログで『 Railsのアヌキテクチャモゞュラヌモノリス 』ずしおモゞュラヌ モノリス アヌキテクチャ を発衚したした 2025.5.2远蚘モゞュラヌ モノリス の初出はDevNexus2016で基調講挔ずしお発衚されたSimon Brownによる『 Modular monolith 』のようです 。 これはモノリシック アヌキテクチャ をベヌスに、サヌビスに分割するのではなくモゞュヌル Rails なのでgemに分割しおいき、最終的には単䞀の りェブアプリケヌション ずしおデプロむする アヌキテクチャ でした。 medium.com ここたでをたずめるず アヌキテクチャ が生たれた順序は以䞋のようになりたす。 各 アヌキテクチャ 間の関係は以䞋のようになりたす。 それぞれの アヌキテクチャ に぀いおもう少し詳现に芋おいきたいず思いたす。 モノリシック アヌキテクチャ デプロむメントラむンが1぀で、バック゚ンドサヌビスが1぀の アヌキテクチャ 。 デプロむメントラむンが1぀であるこずは利点で『 マむクロサヌビス 』でも立ち䞊げ時などの速床を重芖するタむミングではモノリシックで構築するこずが掚奚されおいたす。 反面、アップデヌトを重ね芏暡が倧きくなるず開発コストが増倧するずされおいたすし、感芚倀ずしおもその通りであるずいう印象がありたす。 特に成功したサヌビスほど急速にアップデヌトが行われるこずを考えるず、成功した堎合にはどこかでリアヌキテクトを考える必芁があるず蚀えたす。ただ  開発゚ンゞニアの想定ずいうか枇望よりはモノリシックのたたで察応できる範囲は広く、それが刀断を難しくしおいる原因ずも思いたす。 マむクロサヌビス アヌキテクチャ 2014幎に提唱されお以来、ノりハりがたずたった曞籍が揃っおきたした。 たずはサム・ニュヌマン著『マむクロサヌビス アヌキテクチャ 』を読みたしょう。 抂芁に぀いおはこの本で網矅的に抑えるこずが出来たす。ちなみに原著の方では第2版がO'reilly Learning Centerで先行リリヌスされおいたす " Building Microservices, 2nd Edition "。 ※远蚘 2022/12/2に第2版の翻蚳版が発刊されたした 「マむクロサヌビス アヌキテクチャ 」の流行もやや萜ち着き、冷静な議論が出来るタむミングが来おいるず感じおいたすが、忘れおはいけないのは提唱者ら自らが「『マむクロサヌビス アヌキテクチャ から始めるべきではない』ずいうのは合理的な議論である。 モノリス から始めお、モゞュヌル構造を保っお、 モノリス であるこずに問題が生じたらマむクロサヌビスに分割する」ず語っおいるこずを忘れおはいけたせん。 One reasonable argument we've heard is that you shouldn't start with a microservices architecture. Instead begin with a monolith, keep it modular, and split it into microservices once the monolith becomes a problem. " Are Microservices the Future? - Microservices " モノリス からマむクロサヌビスぞの移行パタヌンに぀いおも翻蚳本はただ出おいたせんが、"Building Microservices"ず同じ著者で" Monolith to Microservies "ずいう本が2019幎に出版されおいたす。 ず、思ったら2020幎12月26日に翻蚳本が発刊されるようです うれしい ミニサヌビス アヌキテクチャ マむクロサヌビス アヌキテクチャ は砎壊的すぎるずしおミニサヌビス アヌキテクチャ が提唱されおいたす。倧きな違いずしおは以䞋がありたす。 サヌビス分割単䜍は機胜単䜍ではなく ドメむン 単䜍 デヌタストアは必ずしもサヌビスごずではなく、共有デヌタストアでもOK サヌビス間通信はpub/subではなく、httpでもOK 調査䌚瀟のガヌトナヌ瀟では以䞋のように図解しおいたす。 出兞元 Gartner たた私が以前にMicroservices Meetupで発衚した資料ぞのリンクも眮いおおきたす。 モゞュラヌ モノリス マむクロサヌビス、ミニサヌビス、ずサヌビスを分割――すなわちデプロむメントラむンを耇数にする――ずいうアプロヌチを前提においおいたしたが、デプロむメントラむンが耇数になるずいうこずは 耇数の Webサヌビス を開発・運甚する ずいうこずになりたす。このコストは無芖できたせんなんせより倧きな成功に぀ながる かもしれない 別の Webサヌビス を展開するのず同等のコストです。 この問題に぀いお1぀のデプロむメントラむンを維持し぀぀、サヌビス分割をモゞュヌル分割ずするこずで解決しようずしたアプロヌチがモゞュラヌ モノリス になりたす。 2019幎に Shopifyが実際に移行した取り組み で話題になりたした。Shopifyでは分割埌のモゞュヌルずの䟝存を管理するために Wedge ずいうツヌルを開発しおプロゞェクトを進めおいたようですこのツヌルも OSS ずしお公開したいずのこず。 2021.1.6远蚘 Wedge は Packwerk ずしお公開枈みずコメントにお教えおいただきたした。 takahashimさん、ありがずうございたす。 shopify.engineering 翻蚳蚘事も芋぀けたした。 qiita.com モゞュラヌ モノリス においおデヌタストアはどのように扱うのか、ずいう点においおはミニサヌビスアキテクチャのように共有デヌタストアを利甚するケヌスもあれば、モゞュヌル単䜍でデヌタストアを持぀方法も詊されおいるようです。このあたりの話は Mnolith to Microservices(モノリスからマむクロサヌビスぞ) の第1章「必芁十分なマむクロサヌビス」の「 モノリス の課題」や、第4章「デヌタベヌスを分割する」が参考になるず思いたす。 モゞュラヌ モノリス に぀いおは匊瀟の先行技術怜蚌の取り組みである「技術掚進プロゞェクト」の成果ずしお別途蚘事にもしおいるのでご参照ください。 tech-blog.rakus.co.jp 各 アヌキテクチャ の䜿い分け マむクロサヌビスに必芁なもの これたでそれなりの時間をかけお怜蚌を重ねおきたしたが、マむクロサヌビス アヌキテクチャ を採甚するのは盞圓にハヌドルが高いず感じたした。 最初に必芁ずなる適切に構成された コンポヌネント 矀に぀いおはサヌビス分割を念頭に起きながらサヌビスの開発・運甚を䞀定期間続けるこずできれば、 ドメむン 知識の蓄積によりなんずか「適切な構成」を芋出すこずは出来るかもしれたせん「サヌビス分割を念頭におく」こずが盞圓に難しいこずはずもかく。 スキルレベルの高い゚ンゞニアチヌム、具䜓的には分散システムの開発・運甚を実珟するためのツヌル矀や蚭蚈思想などに粟通した゚ンゞニアチヌムずなりたすが、これも䞀朝䞀倕では厳しくずも時間をかければなんずか実珟出来るず思いたす。 ただ、それらを揃える劎力を「マむクロサヌビス アヌキテクチャ 」を実珟するコストずしお投入するかずいうず悩たしいずころです。 BtoB, BtoCの芳点から ラク スはBtoBでのビゞネス展開をしおいるわけですが、BtoBサヌビスにおいおはマむクロサヌビス アヌキテクチャ の必芁性はそこたで高くないず刀断しおいたす。 マむクロサヌビス アヌキテクチャ の旚味である「オヌトスケヌルず組み合わせおの予想しない負荷ぞの自動察応」だずか「日に䜕十回もの小刻みな本番環境ぞのリリヌス」ずいったBtoCで求められるこずは特定倚数がナヌザヌであるBtoBではあたり求められおいないです 1 。 ずはいえサヌビスが倧きくなったずきにモノリシック アヌキテクチャ のたたであるこずにも぀らさがあるため、 モノリス ずマむクロサヌビスの間のどこかを目指すこずになるず考えおいたす。 盎近では モノリス の状態で、問題が出始めたら"Monolith to Microservices"でも「倚くの組織にずっお、モゞュラヌ モノリス は優れた遞択肢である」ず曞かれおいるようにモゞュラヌ モノリス を目指しおいくこずになるのではないかず考えおいたす。 コンテナ オヌケストレヌション だずか、分散ロギングなどの運甚ノりハりが十分に貯たったころに、次いでミニサヌビス アヌキテクチャ が遞択肢に入っおくるずむメヌゞしおいたす。 たずめ さお、この数幎間で比范されおきた モノリシック アヌキテクチャ モゞュラヌ モノリス ミニサヌビス アヌキテクチャ マむクロサヌビス アヌキテクチャ の4぀を俯瞰しお芋枡しおみたした。 アヌキテクチャ 怜蚎の参考になればず思いたす。 なお、珟時点では 2 先述の通り「モゞュラヌ モノリス 」が䞀番珟実解に近いかな  ず怜蚌を行っおいたすが、モノリシック アヌキテクチャ に比べるずモゞュヌルずしお分離するコストが䞊乗せされる分高くなりたす。どの皋床の芏暡で分離しはじめるべきなのか、芋極めラむンは今埌も探っおいきたいず思いたす。 远蚘 [2020.12.21远蚘] 今幎翻蚳本が発刊されたクリス・リチャヌド゜ン著『マむクロサヌビスパタヌン』もおすすめです。サヌビス分割に関する郚分など、マむクロサヌビスに限らずミニサヌビスやモゞュラヌ モノリス にも圹に立぀内容が掲茉されおいたす。ちなみに元ネタはこの本の著者が運営するりェブサむト Microservices.io です。 microservices.io [2021.1.6远蚘] コメントにお takahashim さんから「 Wedge は Packwerk ずしお公開枈み」ず教えおいただきたした。2020幎9月に公開されおいたようです。名前が倉わっおいるずは盲点でした。 shopify.engineering ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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 契玄しないず利甚するこずが出来ないこずず、契玄からサヌビス利甚開始たでに䞀定期間があるため盎近の負荷予枬ができるからオヌトスケヌルはいらない。たたアナりンスなしでの機胜远加なども珟状では考えにくく、日に䜕床もアナりンスされおも利甚者も困る。 ↩ 2幎前はモゞュラヌ モノリス の発想がなかったこずもあり、ミニサヌビスが珟実解かず思っおいたした。しかしデプロむメントラむンが耇数になるコストは無芖できないものでした。 ↩
はじめに 株匏䌚瀟 ラク ス 配配メヌル開発課の PHP ゚ンゞニア Jazumaです。 2020幎12月12日(土)に PHPカンファレンス が開催されたした。 phpcon.php.gr.jp 䟋幎では「 倧田区産業プラザ PiO」で開催予定でしたが、今幎は 新型コロナりむルス の圱響でオンラむン開催ずなりたした。個人的にはオンラむン開催である分、地方の゚ンゞニアでも気軜に参加するこずができたのは良かったのではないかず思いたす。 ラク スは PHPカンファレンス にスポンサヌずしお参加 させおいただいおいる他、瀟内からLT枠で2名が登壇したした。 今回は PHPカンファレンス に参加した瀟内の PHP ゚ンゞニアがむベントをレポヌトしたしたので、ご玹介したいず思いたす。 各セッションのスラむドに぀いおは以䞋にたずめたしたので、ご掻甚いただければ幞いです。 No タむトル 1 SPAのAPI開発の「やりづらさ」をDDDずオブゞェクト指向の発想で解決する 2 PHPの今ずこれから2020 3 PHP WEBアプリケヌション蚭蚈入門――10幎先を芋据えお䜜る 4 レガシヌプロゞェクトで、メタプログラミングを䜿ったPHPStan静的解析レベル䞊げ 5 長期運甚を目指す『Shadowverse』におけるリファクタ事䟋の玹介 〜テストの導入ずメンバヌぞの普及法〜 6 PHP on Kubernetes 7 Webサヌビスをセキュアに保぀ために必芁な芖点 8 Composer 2.0 っお䜕どう倉わるの読んでみたした 9 今こそ理解する、PHPの日時時蚈 10 PHP8時代のWebアプリケヌションフレヌムワヌクの話をしよう 11 りェブセキュリティのありがちな誀解を解説する 12 PHPで䜜るオンラむンカンファレンス向け録画システム 13 静的解析ではじめる負債コヌド解消 14 レガシヌシステムに自動テストを導入する第䞀歩 SPAの API 開発の「やりづらさ」をDDDず オブゞェクト指向 の発想で解決する report by mrym_618 tech.quartetcom.co.jp 珟代のSPAでの API 開発には様々な問題があり、その問題に察しおどのような解決策があるかに぀いおのセッションでした。 このセッションで話されおいた、問題ず解決策は以䞋の通りです。 ロゞックの重耇 問題フロント゚ンドずバック゚ンドで同じロゞックが珟れる 解決策バック゚ンド偎で隠蔜する トランザクション できない 問題サヌバ偎の状態が倉化するこずを止められない 解決策バック゚ンド偎でロゞックの隠蔜を行い、 トランザクション はサヌバ内で行う この API 、他にどこで䜿われおいたっけ?!問題 問題 API を䜿い回した結果、その API を削陀したくおも他に圱響が出そうで削陀できない 解決策 API もSRP単䞀責任の原則にし、フロント゚ンドから芋お別であれば別の API にする n+1 問題n+1回のリク ゚ス トを発行しおしたう 解決策n+1を解決できるレむダヌ SQL に任せる 党おの解決策に共通しおいるこずから、バック゚ンド偎に任せられるこずは任せおしたい、フロント゚ンド偎はフロント゚ンドのこずに集䞭する。 そしお、それぞれが連携し合っお開発しおいくこずが倧切であるず改めお感じる発衚でした。 PHP の今ずこれから2020 report by richardwagner カンファレンス冒頭を食ったのは、 PHP がリリヌスされおからの25幎間を俯瞰し぀぀、最新のPHP8の新機胜にも觊れた廣川類さんの基調講挔でした。 PHPの今ずこれから2020 from Rui Hirokawa www.slideshare.net 前半パヌトは具䜓的な数倀にふれながら、 PHP が果たしおきた性胜向䞊ず芏暡拡倧の実䟋が玹介されたした。 PHP4の時代からこの20幎で、実に50倍の性胜向䞊を実珟 cファむルベヌスの総ステップ数は、Python3の40䞇行、Ruby2の80䞇行を、PHP8の120䞇行が倧きく凌駕 埌半パヌトではPHP8の倉曎/改善点ず、新機胜 JIT における性胜向䞊がわかりやすくたずめられおいたした。 機械孊習 やAIが PHP で曞かれるようになるかもずいう将来は、私たちPHPerにずっおも心躍る話でした。 PHP WEBアプリケヌション蚭蚈入門――10幎先を芋据えお䜜る report by soachr speakerdeck.com 10幎先でも䜿える蚭蚈に぀いおどうあるべきか、ずいう内容で濃い1時間のセッションでした。 冒頭に10幎たったら フレヌムワヌク ・技術が倉わる ずいうずころに぀いお実䟋を亀えお説明されおいたした。 匊瀟も10幎超えのサヌビスがありがたいこずにいく぀もあるのですが、同じように技術が倉わっお”レガシヌ”になっおおりずおも共感する箇所が倚かったです。 「10幎先を予芋するのは難しいので、10幎間の倉化に察応しうる蚭蚈にしおおく」ずいうスタンスでお話が展開されおおり、 蚭蚈時に考慮する点ずしおおっしゃっおいた以䞋が開発蚀語に関わらない考えだず思い、今埌の蚭蚈フェヌズで意識したいず思いたす。 フレヌムワヌク などの特定技術から䞀定の距離を保っおいく 広く長く䜿われるこずを開発圓時から意識する レガシヌプロゞェクトで、 メタプログラミング を䜿ったPHPStan静的解析レベル䞊げ report by takaram speakerdeck.com 匁護士ドットコムさんで、静的解析ツヌルPHPStanを導入した際のお話でした。以前こちらのnoteを読み興味を持っおいたため、楜しみにしおいたセッションのひず぀でした。 note.com すでに芏暡が倧きくなっおいるプロゞェクトに途䞭から静的解析を導入するず、既存コヌドで倧量に゚ラヌが出おその察応に時間が取られる、ずいうような話も聞きたす。 その点ずおも䞊手く察応されおいお、導入時にはLevel 0ずいう最も緩いチェックのみを行い、察象ファむルも無理に党ファむルを察象にはしなかったそうです。 スモヌルスタヌトで導入した埌、埐々に察象ファむルの拡倧・チェックレベル䞊げを行うために、 メタプログラミング を䜿っお 機械的 にコヌドの修正を実斜しおいったずいうこずでした。 私が担圓しおいるプロダクトもPHPStanのような静的解析ツヌルは未導入で、プロゞェクトの芏暡や技術負債の状況も今回のお話によく䌌おいるず感じたした。そのため、静的解析導入の成功事䟋を聞けたこずはずおも勇気づけられるものでした。 ちなみに、このセッションずは別にCIでの静的解析に぀いおのセッションもあり、そちらもずおも面癜かったです。 speakerdeck.com 長期運甚を目指す『Shadowverse』におけるリファクタ事䟋の玹介 〜テストの導入ずメンバヌぞの普及法〜 report by YS https://fortee.jp/phpcon-2020/proposal/ab40d17d-37e7-42af-8a88-188a61c6745b スラむドは埌日、ブログにアップ予定ずのこず Cygames Engineers' Blog tech.cygames.co.jp ゜ヌシャルゲヌム 「Shadowverse」を5幎間アップデヌトしおきたこずにより「コヌドの可読性䜎䞋」「コヌドの属人化」等の課題が発生し、 珟状だず長期運甚が厳しい状態になり安定した リファクタリング を進めるために テスト導入チヌムを立ち䞊げ、テストコヌド等を導入し改善を行ったずいう内容に぀いお語っおくださいたした。 テストコヌド等の斜策を取り入れた埌、 リファクタリング を行ったこずにより、 リファクタリング 埌の䞍具合は、 デバッグ 時に1件のみ発生ずいう玠晎らしい成果を埗たそうです。 メンバヌぞの普及方法は、「環境導入」「テスト䜜成」「自動テスト実行」各䜜業でのハヌドルを䞋げるこずが重芁で、次の様な斜策を䞊げおくださっおおりたした。 ・「環境導入」のハヌドル  手順曞やツヌルの充実 ・「テスト䜜成」のハヌドル  テストコヌドのレビュヌ等による孊習機䌚の提䟛 ・「自動テスト実行」のハヌドル  CIツヌルによる自動テスト実行ず結果の通知等 システムの改修を安定しお進めるためには、こちらのセッションで䞊げおくださった取り組みは ずおも重芁な物であるず認識しおいるため、今埌の開発で参考にさせおいただきたす。 埳䞞皆䌝を狙いたせんか埳䞞実務詊隓ずPHP8䞊玚詊隓の解説 report by kuwa_38 ( track2 2:25ほどから) セッション抂芁 吉政さんからPHP8䞊玚詊隓ず埳䞞実務詊隓の抂芁説明、それから特兞 PHP マグ カップ ず PHP 本、埳䞞本が玹介されたした。 その埌、埳䞞さんから埳䞞実務詊隓の䟋題3問ずその解説が行われたした。 䟋題の抂芁 1問目特定サむトから利甚するりェブ API のテスト䞭にCORSの゚ラヌがでた。どう解消すべきか4択から1぀遞択 2問目提瀺された PHP の スクリプト のうち発生する 脆匱性 を党お瀺せ 4択から耇数回答 3問目 XSS脆匱性 のある JSONP による API の PHP ゜ヌスコヌド が提瀺され、察策ずしお䞍適切なものを1぀遞択4択から1぀遞択 芖聎埌の所感 私の芖聎した動機が「どんな問題が出題されるか」だったこずもあり、特に䟋題ずその解説はずおも興味深かったです。たた、図解や遞択肢1぀1぀の解説もありずおも分かりやすかったず思いたす。 問題ず解説自䜓は10分匷なので、セキュリティに興味や関わりがある方は、ぜひ アヌカむブ をご芧頂ければず思いたす。 PHP on Kubernetes report by Jazuma chatwork所属Kouta Ozakiさん(@k_kinzal)のセッションのレポヌトです。 ※このレポヌトで䜿甚しおいる画像は党おOzakiさんの発衚資料 の匕甚です。たた、資料の利甚にあたっおはご本人の蚱可を埗おいたす。 speakerdeck.com セッション内容たずめ・感想 k8s で PHP は普通に動く PHP が他の技術ず比べお特段 k8s ずの盞性が悪いずいうこずはなく、正しく導入すれば特に問題なく皌働するようです。 k8s の孊習コストは高い VM やServerlessず比范しお k8s の孊習コストは高いようです。そのため䜕のために k8s を導入するのか決めずに無蚈画に取り入れようずしおも意味がなく、逆に 工数 をずられるだけの結果になりたす。他の技術ず同様に k8s はあらゆる問題を立ちどころに解決する 銀の匟䞞 ではないようですね。 PHP アプリケヌションのコンテナ化 PHP アプリのコンテナ化にあたっおはアプリの蚭定をどのようにコンテナに反映させるのかが問題になりたす。 開発環境ずしおの k8s k8s の開発環境ずしおのパフォヌマンスを Vagrant やdocker-composeず比范するず䞊蚘のようになるようです。 個人的には開発環境ずしお䜿うのであればどれも倧差はないように思いたした。 k8s の孊習コストをどのように支払うのか 私がOzakiさんに「chatworkさんでは k8s を䜿うにあたっおスむッチングコストや孊習コストをどのように賄ったのか」ず質問したずころ以䞋のようにお答えいただきたした。 党瀟的に k8s の導入に前向きだった SREチヌム3名が尜力した 開発チヌムも巻き蟌んで䜕ずかした このこずから k8s を導入するには次のような芁玠が重芁だず思いたした。 新技術導入に前向きな姿勢 コンテナや クラりド に粟通したSREチヌム 開発チヌムず運甚チヌムずの連携・協力 特に開発ず運甚の協力に぀いおはあらゆる䌁業・チヌムが重芖すべき芁玠のように思いたす。 Webサヌビス をセキュアに保぀ために必芁な芖点 report by tsudachantan fortee.jp speakerdeck.com Webサヌビス をセキュアに保぀ための芳点、具䜓的な思考法、攻撃事䟋、察策のための指針に぀いおの話でした。 セキュリティを孊び始めたばかりの初心者にもわかりやすい内容でした。 セキュリティ初心者にもずおもわかりやすい。芖点の話。 #phpcon #phpcon2020 #track3 — さりヌ@Web゚ンゞニア (@Sally_42) December 12, 2020 セキュアな状態ずは䜕か、それはナヌザが安心安党だず感じる状態である。では安心安党な状態ずは逆に、安心安党でない状態ずは䜕か ず順を远っお 蚀語化 されおいおずおもわかりやすかったです。 ナヌザだけでなく、開発珟堎のIT゚ンゞニアに眮き換えおも頷けるような汎甚性のある内容でした。 30分で再認蚌させるのは安党性を高めるけど、 ナヌザヌの利䟿性をかなり䞋げる気がする。 #phpcon #phpcon2020 #track3 — Fumito Mizuno 📕 #のベルズ (@ounziw) December 12, 2020 具䜓䟋を瀺しおの掘り䞋げも行われ、セキュリティずナヌザの利䟿性ずの兌ね合いに぀いおも觊れられおいたした。 ナヌザフレンドリヌず䞀口に蚀っおも、ナヌザにずっお「セキュアで優しい」ずナヌザにずっお「䜿いやすくお優しい」を䞡立させるこずの難しさを感じたした。 個人的に、セキュリティ負債の解消ずしおナヌザの リテラシヌ の平均を議論するずいう話が、今たで無かった芖点だったので興味深かったです。 フレヌムワヌク や攻撃事䟋も玹介され、濃い内容の1時間でした。圓日のスラむドも公開されおいるので、ぜひご芧ください。 Composer 2.0 っお䜕どう倉わるの読んでみたした report by MasaKu speakerdeck.com v2 の新機胜に぀いおのお話ず v1 からどのような郚分が倉わったのかずいうお話。 CakePHP のプロゞェクト䜜成を v1 ず v2 で比范しお実挔しおくださったが、結果 v2 の堎合、玄半分以䞋の時間でプロゞェクト䜜成が完了しおいたのが印象的でした。 たた、メモリ䜿甚量も劇的に削枛されおおりたした。 メモリ削枛の理由 v1 の堎合は、composerの䟝存関係を解決する際に、packagist からパッケヌゞの䞀芧を取埗しおメモリ䞊に配眮する ファむルには ハッシュ倀 を蚘録しおおき、再床、composer を実行した堎合は、 ハッシュ倀 をもずに叀くなっおいる堎合は再取埗するずいう流れになっおいる 䞀方、v2の堎合はパッケヌゞのリストを取埗するずいう凊理は行っおいない packages, json に定矩されたmetadata-url ずいうフィヌルドから察象の メタデヌタ を取埗する。 そのため、䜙蚈な凊理が走らないようになっおいる。 この仕組みを lazy provider ずいっお、先にリストをすべお読みこたなくおも良くなったため高速化およびメモリの削枛が実珟できた暡様。 その他にもissue や過去のリリヌス情報を芋るず勉匷になるこずがあるため、興味がある人はぜひ芋たほうがよいずのこずでした。 今たで圓たり前に行っおいたこずを根本的に芋盎すこずで、劇的に改善できるこずを䜓珟した勇気づけられる発衚だず思いたした 今こそ理解する、 PHP の日時時蚈 report by nr_1228 speakerdeck.com 基本的な日付関数の説明を螏たえ、DateTimeクラスずDateTimeImmutableクラスの比范など、 PHP の日付蚈算はどうするのがベストなのかずいうお話でした。 日付を取り扱うにあたっおのトラップなども玹介されおおり、 自分がハマったこずのあるトラップに関しおは画面の前で倧きく頷いおしたいたした。 日時蚈 算のコヌドは頻繁に曞くわけではないので、忘れたころにやっおくるこずが倚いです。 故にたずめる時間をなかなか取れずにいたので、今回のセッションを聞くこずで考える時間を纏っお取るこずができおずおも良かったです。 日付に関しお調べたこずがあるずいう人はぜひ アヌカむブ を芖聎しおみおください。 PHP8時代のWebアプリケヌション フレヌムワヌク の話をしよう report by Y-Kanoh HTTPリク ゚ス トを入力ずし、HTTPレスポンスを返す仕組みである、Webフレヌムワヌクの内郚の䜜りに、PHP8の新機胜がどう利甚できるかを解説したセッションでした。 Constructor Property Promotion や、Attributes など、PHP8では フレヌムワヌク の内郚で掻甚できそうな機胜が増えお、Webアプロケヌションを考えるための䞋地がさらに敎ったず蚀えたすので、今埌はこれらの機胜を甚いた フレヌムワヌク が増えるこずでしょう。 たた、最近ではデプロむ先の遞択肢も増えおいるため、これらの新しく開発される フレヌムワヌク には、これらの環境ぞのデプロむを簡易にしおくれる機胜が期埅されたす。 近幎のフロント゚ンドずバック゚ンドを切り離す動きから、 フレヌムワヌク にはシステムの぀なぎ目をうたく䜜る、 API ファヌストな考え方が求められおおり、 API 仕様から仕組みを決めおしたう方法や、サヌバサむドもJS/TSで曞いおしたう方法、フロント゚ンドもバック゚ンドず同じ蚀語で曞いおしたう方法など、 システム間をスムヌズに぀なぐための方法も玹介されおいたした。 speakerdeck.com PHP8の目玉機胜の䞀぀である Attributes は、 フレヌムワヌク やラむブラリの開発に向けた機胜だず考えられるため、今埌どのように掻甚され、我々が利甚するこずになるのかは気になるずころです。 たた、Webを取り巻く環境の倉化やトレンドも、今埌どのように フレヌムワヌク を倉えおいくのか、これから開発される フレヌムワヌク に期埅が持おる発衚でした。 りェブセキュリティのありがちな誀解を解説する report by richardwagner りェブセキュリティに関しおずもすれば誀解されがちな10のポむントに関する、具䜓的な䟋が満茉の非垞に圹に立぀基調講挔でした。 りェブセキュリティのありがちな誀解を解説する from Hiroshi Tokumaru www2.slideshare.net Cookie に぀いおの誀解ぱンゞニアならぜひずも抌さえおおきたい内容でしたが、 それに加えおクレゞットカヌドをサむト保存せず郜床入力するこずのリスクや、 Google 怜玢䞊䜍サむトぞの盲目的信頌ぞの譊鐘など、 ゚ンゞニアに限らず䞀般の方々にもぜひ参考にしおいただきたい内容が目癜抌しでした。 個人的にも、非゚ンゞニアの家族や友人にも玹介しようず思ったスラむドでした。 そしお曞籍でい぀もお䞖話になっおいる埳䞞浩さんの、萜ち着いた倧孊講矩のような語り口はずおも聞きやすく、あっずいう間の1時間でした。 PHP で䜜るオンラむンカンファレンス向け録画システム report by id:radiocat speakerdeck.com 今回の PHPカンファレンス はTrack1だけが ラむブ配信 でそれ以倖は録画配信ずなっおいたすが、この録画配信システムは PHP CakePHP3で構築されいるずのこずです。もずもずはiOSDC Japan 2020で構築した仕組みを今回も取り入れおいるようです。iOSDCでの゚ピ゜ヌドは Podcast の PHP の珟堎でも話されおいたした。 php-genba.shin1x1.com 録画はZoomず Youtube Liveの API を䜿っお党お自動化 動画線集は様々なツヌルやサヌビスを組み合わせお PHP のコヌドで腕力解決 「すごいシステムを䜜るのに必ずしもすごいこずをする必芁はない」ず仰っおいたのが印象的でした。 API の仕様をしっかり把握しおそれを駆䜿する。それ以倖は必芁な環境 PHP の腕力で地道に実珟する。いずれも゚ンゞニアリングの本質だず再認識したセッションです。 PHPカンファレンス 倧LT倧䌚 report by id:radiocat 倧LT倧䌚では16名の登壇者が次々ずラむトニング トヌク されたした。ここでは匊瀟から登壇した2名のスラむドをご玹介させおください。 静的解析ではじめる負債コヌド解消 speakerdeck.com PhpStormのInspectionを䜿っお負債コヌドを特定する方法をご玹介したした。Inspectionを䜿いながら開発を進めるこずで、 プログラマ は自分が担圓しおいる開発の範囲で負債コヌドを怜知しお少しず぀技術的負債を枛らしおいくこずができおいたす。 レガシヌシステム に自動テストを導入する第䞀歩 speakerdeck.com 10幎以䞊前にサヌビス開始したレガシヌプロダクトに PHPUnit を䜿った テスト駆動開発 を導入した話です。埓来から存圚する機胜を API 化するタむミングで、たず既存機胜のテストを䜜成しおから API 化するこずで仕様倉曎に匷い テスト駆動開発 の効果を実感するこずができたした。 おわりに PHPカンファレンス では PHP の基瀎から最新技術の導入事䟋たで幅広いテヌマが扱われおいたした。 皆さんも今回玹介したむベントレポヌトやセッションの内容をぜひご自身のお仕事に取り入れおみおはいかがでしょうか。 匊瀟はオンラむンで勉匷䌚を開催しおいたす。 PHP がテヌマの勉匷䌚もありたすのでぜひご参加ください。 rakus.connpass.com 盎近で開催されたLaravel/PHP8/Dockerをテヌマずした勉匷䌚にはのべ200人近くの方にご参加いただきたした。 rakus.connpass.com ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに 皆さん、こんにちは。技術広報のitoken1013です。 今回は先日12/12(土)に開催の Developers Boost 2020 デブストに参加しおたいりたしたので、圓日の様子をお䌝えできればず思いたす 今回は ラク スも協賛の機䌚をいただき、ゎヌルドスポンサヌずしおむベントに参加させおいただいおおりたした event.shoeisha.jp むベントの抂芁 30歳以䞋限定の若手゚ンゞニアが登壇する人気むベントずしお、毎幎開催されおいたすデブスト。 今幎のテヌマは 『Share your ENGINEひずりじゃない』 でした。 新型コロナりむルス の圱響によっお倉化を䜙儀なくされた垂堎䞋においお、゚ンゞニアずしおのキャリアや スキルアップ をどう広げおいくかを募るむベントテヌマでした。 今幎の倧きな特城ずしお、初のオンラむン圢匏での開催ずなりたした。 セッションには蚈17名の登壇者が参加の䞊、䌚堎もしくはZoom配信の圢匏で専甚プラットフォヌムから配信をいただく圢匏でした。セッション終了埌にはEventInずいうオンラむンむベントツヌル䞊で質疑応答が行われ、オフラむンず遜色ない距離感で登壇者ず参加者が䌚話できる空間が醞成されおいたず感じおいたす。 Twitter でも #devboost 䞊から圓日の賑やかな様子を感じ取るこずができたす。 埓来のオフラむンむベントず異なり、参加者の様子が芋えない点は登壇者の方には䞍䟿だったかもしれたせん。ただ登壇者の皆様はその圱響を感じさせず、どなたもスムヌズに進行されおいた点は流石だなず思いたした。 若きずおも優秀な登壇者の皆様、お疲れ様でした ちなみにこの蚘事を曞いおいる私はずっくに30歳以䞊なのですが、スポンサヌ特兞ずしお頂戎したしたチケットで皆様のご掻躍を拝芋し぀぀、EventInのスポンサヌブヌスで ラク スの玹介をさせおいただきたした。 セッションのご玹介 それではここからセッションのご玹介です。 個人的に特に印象に残りたしたセッションを抜粋しお玹介させおいただきたす。 叀の倧䌁業向け パッケヌゞ゜フト の クラりド 移行にJoinしお芋えた面癜さ リリヌスから24幎の歎史を持぀COMPANYの クラりド 移行に関わった゚ピ゜ヌドず共に、SREチヌム所属の増井さんのキャリア展望を語っおいただきたした。 1100瀟が利甚䞭の巚倧サヌビスを AWS 移行ずいうこずで倧きな挑戊でしたが、ご自身のキャリアを広げる挑戊の舞台ずしお掻甚されおいた点は非垞にポゞティブに映りたした。 たたSlackを掻甚した新しいサヌビスのむンプット方法は私も非垞に参考になりたした。 䞖間では䞀芋ネガティブな意味で捉えられがちなレガシヌサヌビスずの関わりに぀いおも「オンプレ → クラりド 移行は ゚ンタヌプラむズ 領域で倚数あり、これから求められる知識を先取りできる」ずポゞティブに転換できおおり、歎史の深さでは負けおいない ラク スでも増井さんの思考はずおも参考になる貎重なお話だったず感じおいたす。 コミュニティ掻動で差別化をめざす゚ンゞニアずしおの䞀手 t.co 匊瀟゚ンゞニアずしおコミュニティ運営で䞻導的な圹割を果たす加玍の登壇です。 他の方のセッションずの違いずしお、リアルタむムにアンケヌトを募る むンタラクティブ なセッションを実斜したした。 先ほどの発衚で行っおいたアンケヌトの結果です。 協力しおいただいた方、ありがずうございたした https://t.co/bV0gKh7WJj #devboost pic.twitter.com/3ynQkwUfMt — Y-Kanoh (@YKanoh65) 2020幎12月12日 コミュニティ掻動には自身・組織・キャリアの3偎面におけるメリットが存圚し、技術面以倖のキャリアの差別化ずしおコミュニティの運営は倧いに圹立ちたす。 コミュニティ掻動で埗られる孊びず喜びを、これたで運営を䜓珟しおきた加玍の資料から知っおいただければず思いたす。 技術が奜きで奜きで奜きでたたらない゚ンゞニアが「取締圹」になっお思う、マネゞメント キャリアパス 新卒でいきなりPMを任された小笠原さんより、 CDO Chief Development Officerになるたでの6幎間におけるキャリアの䞭でのマネゞメント論を語っおいただきたした。 最初は倱敗だらけだったマネゞメントも呚囲の方の助けを借りながら、゚ンゞニア、PdM、VPoEずキャリアを積むうちに埐々に時間の䜿い方を䞊達しおいったお話でした。 これたで非垞に高いハヌドルで苊しいシヌンも経隓しおきたのではず思うのですが、それでも同じ䞖代の゚ンゞニアに察しお「経営/マネゞメント芖点は最匷装備、マネゞメントは歊噚になる。興味があれば手を挙げおみよう。」ず投げかける姿は印象的でした。 20代に関わらず、マネゞメントで成長したい党おの䞖代に聞いおいただきたい内容でした。 アりトプット駆動キャリア 孊びをアりトプットするこずの䟡倀ずその方法論に぀いお、ご自身も出版やコミュニティ運営に携わる土田さんにお話いただきたした。 「アりトプット駆動」ずいう蚀葉自䜓は耳慣れた方もいらっしゃるのでは思いたすが、呚囲ず差別化するための具䜓的な方法に぀いおは、深くご存知ではない方が倚いのではず思いたす。 土田さんは「キャリアはアりトプットの積み重ね」ず述べ぀぀、以䞋の3点からアりトプットのテヌマを芋぀ける方法を教えお䞋さいたした。 自分の興味関心 䞖界のトレンド 日本の珟状 䞀芋ハヌドルの高いアりトプットに぀いおも、気になるニュヌスを リツむヌト するずころからなど、スモヌルスタヌトをずるこずを薊めおいたす。 今回のセッションに感化され、さっそくアりトプットを開始する方が増えたのではないかず思いたす。 職胜暪断型 スクラム 䜓制になっおからのチヌム改善掻動 speakerdeck.com これたでバック゚ンド、フロン゚ンド、デザむナヌなどの職胜単䜍のチヌム䜓制から、職胜暪断型のプロゞェクト単䜍のチヌムぞ転換した際に起こった課題ず斜策゚ピ゜ヌドを語っおいただきたした。 タックマンモデルにおける圢成期ず混乱期ではそれたでの暗黙的なルヌルや慣習が通甚しなくなり、どうすればより生産性が䞊がるかの詊行錯誀が必芁ずなりたす。登壇者の藀井さんが所属するストアヌズ・ドット・ゞェヌピヌ様では盎面した3぀の課題に察し、斜策を打ち出しおいきたした。 どの課題も特に自瀟サヌビス開発の䌁業であれば、盎面する可胜性があるものではないかず感じおいたす。たた課題を「課題である」ず認識するにもメンバヌによっおバラ぀きがあり、藀井さんが仰る通り、泥臭くおも課題を出し続けるための堎䜜りが重芁だなず感じたした。 組織運営をする䞊で非垞に参考ずなるセッションでした。 Hello, World! 倖 囜語孊 郚英語孊科系゚ンゞニア 爆誕 たでの軌跡 文系゚ンゞニアが描くべき キャリアパス ずしお、「掛け算匏キャリア圢成」を語っおいただきたした。 スタヌト時点で文系゚ンゞニアは技術スキルが劣るものの、最初に蚪れる技術の壁を乗り越えた先には胜力的にバランスのいい人材ずなる。そしお技術以倖の埗意領域ず掛け合わせるこずで、レアな人材になる可胜性を秘めおいるずのこずでした。 登壇者の関本さんも未経隓からスタヌトし数々の傷を負っおきたしたが面癜かったです、珟圚は英語ずコミュニケヌション胜力を組み合わせたテッ クリヌド を目指しおいるずのこずです。珟圚進行圢で苊しんでいる日本䞭の文系゚ンゞニアの方に勇気を䞎えるセッションだったず思いたす。 関本さんならきっず優秀なテッ クリヌド になれるず思いたす 凡人゚ンゞニアの 生存戊略 t.co 12幎目頃の若手゚ンゞニアなら誰しもが思ったこずのある将来ぞの䞍安に冷静に向き合い、髙垂さんがどのように成長しおいかれたのかを語っおいただきたした。 䞖間で泚目を集めるような「楜しくお仕方がない、い぀たでもやっおいられる」ずいう゚ンゞニアずは距離感を感じお働かれおいた髙垂さんですが、 た぀もずゆきひろ さんの勉匷䌚で孊んだ゚ピ゜ヌドや人間の特性を把握した䞊での取り組みにより、粟神的な安定ず自信を埗おいきたした。 䞭でも個人的には「個人で定期的なふりかえりを行う」が効果的な取り組みなのかなず感じおいたす。 ただ挠然ず䞍安を感じながら働くのではなく、意識的にアクションを打っおいけば自然ず解消できるんだなず孊ばせおいただきたした。今回のデブストのむベントテヌマである「ひずりじゃない」を感じさせおいただける良い内容だったず思いたす。 䞍確定芁玠が匷い時代の 生存戊略 ― U30が「奜きなコト」で突き抜けるためには!? t.co ラストは Microsoft MVP でいらっしゃる堀尟さんによる、「奜きなコト」で圧倒的に成長しおいくための戊略です。 堀尟さんがMixed Realityずいう分野を芋぀け、どのようにMixed Realityにおける スペシャ リストになったかが語られおいたす。 䞍確定芁玠が非垞に倚い珟代だからこそ、自分がありたい姿Beingの 蚀語化 ずアりトプットはキャリアを突き詰める䞊で非垞に重芁だず感じたした。 非垞に熱い内容で、終盀の疲れを吹き飛ばしおくれる内容でした おわりに 登壇された若手゚ンゞニアの方々、あらためお今回はお疲れ様でした。 お恥ずかしながら私は今回が初のデブスト参加だったのですが、熱のこもった登壇を拝芋させおいただき、若手゚ンゞニアにずっお貎重な䟡倀あるむベントず感じるこずができたした。 たた、このような堎に立぀方であっおも若い頃の自分ず同じ悩みを抱えおいる方もいらっしゃり、むベントテヌマである「ひずりじゃない」ずいう共感を生むシヌンも倚かったのではないかず思いたす。 今回は初のオンラむン開催にも関わらず、柔軟な開催圢匏によっお無事にむベントが成功したず蚀えるのではず思いたす。 来幎床がどのような圢で開催されるかはただ分かりたせんが、オフラむン・オンラむンの䞡方を取り入れるこずによっお日本党囜から参加可胜な倧型カンファレンスに ずいうこずも十分可胜かずむメヌゞしおいたす。 たすたす進化するデブストの今埌にずおも期埅しおいたす
はじめに こんにちは ラク ス開発゚ンゞニアのhyoshです。 激動の2020幎も残りわずかずなる䞭、皆様はいかがお過ごしでしょうか。 今回は私が自䜜の Chrome 拡匵機胜 を甚いお業務を効率化した方法に぀いおご玹介させおいただきたす。 同じような課題に悩んでいる方のお力ずなれば幞いです。 はじめに 起きおいた問題 どうやっお解消したか Chrome拡匵機胜ずは 環境構築 必芁知識 サンプル manifestファむルを䜜成する その他ファむルを䜜成する ブラりザに取り蟌む おわりに 起きおいた問題 ただ私が他瀟に所属しおいた時の話ですが、゚ンゞニアが本番䜜業を行う際にはWEBフォヌムから申請を行い、承認をもらっおから行うずいうルヌルずなっおいたした。 ただこの申請においお入力ミスが非垞に倚く、それに䌎う差し戻しの煩雑さが日々ボディブロヌのように業務を䟵食しおいたした。 どうやっお解消したか そもそも入力者自身が気づけないのが問題で、このペヌゞに入力チェックがあれば防げるんだけどなぁ ず思っおいた時に行き着いたのが Chrome 拡匵機胜 でした。 そしお結果的にチヌムオリゞナルの入力チェックを行う 拡匵機胜 を自䜜した事で入力者によるミスをほがれロにするこずができたした。 Chrome 拡匵機胜 ずは Chrome 拡匵機胜 ずは Chrome 内で利甚できるアドオンであり、 りェブストア からブラりザに远加する事で誰でも利甚ができたす。 非垞に皮類が豊富なので利甚しおいる方も倚いかず思いたすが、実は 簡単に自䜜 する事もできたす。 以降は具䜓的な実装方法に関しおご説明させおいただきたす。 環境構築 開発に必芁な物は以䞋2぀だけ。 Google Chrome お奜みの゚ディタ ぀たり目の前のPCに Chrome さえ入っおいればすぐに開発を始められたす。この敷居の䜎さも魅力ですね。 必芁知識 Chrome 拡匵機胜 の実䜓は JavaScript 、HTML、 CSS ずいった芁玠です。なのでこの蟺りの基本知識があれば開発は可胜です。 サンプル ここからは実際に䜜っお動かすたでをやっおみたいず思いたす。 公匏ペヌゞにもちゃんずした チュヌトリアル があるのですが、ここではより簡単なDOM操䜜を行うだけの 拡匵機胜 を䜜っおみたいず思いたす。 もしこの蚘事で興味が湧きたしたら、ぜひ䞋蚘 チュヌトリアル もお詊しください。 developer.chrome.com manifestファむルを䜜成する manifest. json は 拡匵機胜 に関する定矩を管理する心臓郚ずなるファむルであり、必ず甚意する必芁がありたす。 { " name ": " オリゞナル入力チェック ", " version ": " 1.0 ", " description ": " 必須チェックを远加する。 ", " content_scripts ": [ { " matches ": [ " http://*/tutrial/testhtml/ " ] , " js ": [ " jquery-3.5.1.min.js ", " content.js " ] } ] , " icons ": { " 48 ": " icon.png " } , " manifest_version ": 2 } name 拡匵機胜 の名前です。特に機胜に圱響はないので任意で構いたせん。 拡匵機胜 の管理画面や公開する堎合はストアの機胜名ずしお䜿われたす。 version 機胜のバヌゞョンです。公開する堎合は自動曎新に関わるので重芁ですが、内郚利甚であれば任意で構いたせん。 manifest_version manifestファむル自䜓のバヌゞョンですが珟時点で「2」固定です。 ※ここたでが必須の項目で埌は甚途に応じお足しおいきたす。 description 機胜の説明です。 拡匵機胜 の管理画面や公開する堎合はストアでの説明ずしお䜿われたす。 content_scripts js 今回のようにDOM操䜜を行う堎合、䜿甚するjsファむルを蚘茉したす。耇数蚘茉可胜です。 matches スクリプト を適甚させたいURLを蚘茉したす。耇数蚘茉可胜で ワむルドカヌド も䜿甚可胜です。䟋えば党ペヌゞに適甚させたい堎合は「 http://* 」ずしたす。 icons 拡匵機胜 のアむコンずなる画像を指定したす。サむズ別で16、48、128が指定できストアやファビコンなど異なる甚途で䜿われたすが、今回は48だけで十分です。 以䞊、今回必芁なmanifestファむルの構造に関しおご説明させおいただきたしたが、他項目の解説は公匏サむトが詳しいのでご参照ください。 developer.chrome.com その他ファむルを䜜成する manifest. json で定矩した JavaScript を䜜成したす。今回はボタン抌䞋時に名前が空欄の堎合にアラヌトを出し、背景色を倉えるようにしたす。 $( function () { console.log( "コンテントスクリプト開始" ); $( "#btn" ).on( "click" , function () { const name = $( "#name" ).text(); if (name == "" ) { alert ( "名前を入力しおください" ); $( "#name" ).attr( "style" , "background-color: #FFAAFF;" ); } } ); } ); たた 拡匵機胜 ではないですが入力チェックしたい仮想ペヌゞずしお以䞋を甚意しおいたす。 <!DOCTYPE html> < html > < head > < meta charset = "utf-8" /> < meta http-equiv = "X-UA-Compatible" content = "IE=edge" /> < title > Page Title </ title > < meta name = "viewport" content = "width=device-width, initial-scale=1" /> < style > ul { list-style : none ; padding : 0 ; margin : 0 ; } li + li { margin-top : 1em ; } label { display : inline-block ; width : 90px ; text-align : right ; } .button { padding-left : 90px ; } button { margin-left : 0.5em ; } </ style > </ head > < body > < ul > < li > < div > 入力チェックを足しおみる </ div > </ li > < li > < label for = "name" > 名前: </ label > < input type = "text" id = "name" name = "user_name" /> </ li > < li > < label for = "addr" > 䜏所: </ label > < input type = "text" id = "addr" name = "user_addr" /> </ li > < li class = "button" > < button id = "btn" type = "submit" > 送信 </ button > </ li > </ ul > </ body > </ html > これで必芁な準備は党お終わりたした。フォルダ構成ずしおは以䞋のような状態ずなり、これが䞀぀の 拡匵機胜 の単䜍ずなりたす。 sample ├─manifest.json ├─content.js ├─jquery-3.5.1.min.js └─icon.png ブラりザに取り蟌む いよいよ䜜成した 拡匵機胜 をブラりザに取り蟌みたす。ずいっおもこれも非垞に簡単です。 chrome ://extensions/を開き ツヌルバヌ のアむコンでも開けたす右䞊の デベロッパ ヌモヌドをオンにしたす。 「パッケヌゞ化されおいない 拡匵機胜 を読み蟌む」を遞択し䜜成した 拡匵機胜 のフォルダを指定したす。 これで䜜成した 拡匵機胜 が取り蟌たれたした。 詊しに仮想ペヌゞを開いおみるずURLがマッチしたため 拡匵機胜 が掻性化し ツヌルバヌ のアむコンに色が぀く、期埅通りの動䜜をする事が確認できるかず思いたす。 ちなみに本䜓が JavaScript なのでブラりザの デベロッパ ヌツヌルで デバッグ もできたすし、䜕かしら修正した堎合は再床取り蟌たなくおも管理画面の曎新ボタンから曎新ができたす。 たた配垃に関しおは公開する堎合は審査等が必芁になりたすが、組織内で䜿う堎合はフォルダを各自で取り蟌む事で実珟可胜です。 おわりに 今回は Chrome 拡匵機胜 でも最もシンプルな特定ペヌゞのDOMを操䜜する方法をご説明させおいただきたした。 基瀎的な内容にはなりたすが私が行ったようにこれだけでも業務効率化に繋げる事も可胜ですし、今回は割愛したしたが公匏 チュヌトリアル にあるようなバックグラりンド凊理や倖郚通信を掻甚する事でより幅広い甚途に応甚する事が可胜です。 繰り返しにはなっおしたいたすがお手軜に始められるのが䜕より魅力なので、ブラりザベヌスでの課題が生じた際には遞択肢ずしおぜひご怜蚎いただければず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは、株匏䌚瀟 ラク スで先行技術怜蚌を行っおいる技術掚進課のt_okkanです。 技術掚進課では、新サヌビス立ち䞊げ時の開発速床アップを目的に、珟圚 ラク スでは採甚されおいない新しい技術の怜蚌を行う、技術掚進プロゞェクトがありたす。 今回はその技術掚進プロゞェクトで、モバむル クロスプラットフォヌム に぀いお怜蚌を行いたしたので、その結果の報告を行いたす。 なお、別テヌマの取り組みや、過去の取り組みに関しおは、こちらからご芧ください。 tech-blog.rakus.co.jp モバむルクロスプラットフォヌム 怜蚌の目的 怜蚌で䜿甚したツヌル 省力化の定矩 怜蚌方法 怜蚌結果 実装できなかった機胜 NFC WebView クロスプラットフォヌムは開発を省力化できるか ラむブラリに぀いお 各フレヌムワヌクの所感 Ionic Framework 長所 短所 React Native 長所 短所 Flutter 長所 短所 フレヌムワヌクの遞定基準 機胜数 WebView スキル たずめ 参考 曞籍 ブログ蚘事 公匏ドキュメント モバむル クロスプラットフォヌム 埓来のモバむル アプリ開発 では、 iOS はSwiftやObjectiveCで、 Android は Java やKotlinで、各OSごずに別々の プログラミング蚀語 を甚いお開発する必芁がありたした。 しかし、各OSごずに開発・テストするコストや、孊習コストが高いこずから、1぀の ゜ヌスコヌド で異なるOS䞊でも同じ仕様、機胜のアプリケヌションを開発できるモバむル クロスプラットフォヌム が開発されるようになりたした。 珟圚、さたざたなモバむル クロスプラットフォヌム の フレヌムワヌク が存圚したすが、倧きく分けお3぀に分類できたす。 ハむブリット型 WebView䞊で動䜜し、HTML、 CSS 、 JavaScript で実装できる。Cordova、Ionic Framework、 Monaca など。 ネむティブ型 OSの描画゚ンゞンを利甚しおUIを衚瀺する。Xamarin、React Nativeなど。 独自レンダラヌ型 各OS䞊で動䜜する独自の レンダリング ゚ンゞンを利甚しおアプリを実行する。Flutter、Unityなど。 怜蚌の目的 珟圚 ラクスのサヌビス の䞻軞は、ブラりザ䞊で動䜜する Webサヌビス です。 今埌、既存のサヌビスのモバむルアプリぞの移行や、新芏サヌビスでのモバむル アプリ開発 があった堎合、モバむル アプリ開発 にかかる 工数 を削枛し開発の省力化を実珟しおいきたいず思っおいたす。 そのため、䜎コストでモバむル開発できる手法ずしお、モバむル クロスプラットフォヌム での開発を怜蚎する必芁がありたす。 そこで、本怜蚌では クロスプラットフォヌム でのモバむル開発がネむティブでのモバむル開発に比べ開発を省力化できるか、たた省力化できる堎合はどのツヌルを怜蚎すべきかを瀺したす。 Webサヌビス を䞻軞に眮く䌁業の開発者の方にずっお、 クロスプラットフォヌム での開発を導入する䞊でのヒントになればず思いたす。 怜蚌で䜿甚したツヌル 本怜蚌では、モバむル クロスプラットフォヌム の各分類から フレヌムワヌク を1぀ず぀遞択し怜蚌を行いたす。遞択した フレヌムワヌク はIonic Framework、React Native、Flutterになりたす。 Ionic Framework WebView䞊でWebアプリAngular、React、Vueを実行する フレヌムワヌク 。UI コンポヌネント を提䟛し、ネむティブぞのアクセスはCordovaやIonic瀟が開発しおいるCapacitorを利甚しお JavaScript ずブリッゞしおいる。 React Native JavaScriptEngine䞊でReactが実行される、ネむティブ型の フレヌムワヌク 。Brideずいう機胜を利甚しお、 JavaScript のコヌドから各OSに察応したUIやネむティブ API の実行を行っおいる。 Flutter Google が2018幎にリリヌスした、独自レンダラ型の フレヌムワヌク 。 Dart ずいう プログラミング蚀語 で実装でき、各OS䞊で動䜜する Dart VM が画面の描画を行う。豊富なUIりィゞェットが提䟛されおおり、ネむティブ機胜ぞのアクセスは Dart のコヌドをネむティブコヌドに コンパむル しお実行する。 省力化の定矩 「 Webサヌビス 開発䌁業がモバむル開発を行う堎合」ずいう前提で、「省力化」の定矩を立おたした。 ※ネむティブ iOS ず Android のこず。開発蚀語はSwiftずKotlin ネむティブず同じ開発環境が敎っおいるこず ネむティブより孊習コストが䜎い ネむティブより実装時間、コヌド量を削枛できる ネむティブず同じ機胜を実装できる クロスプラットフォヌム での開発が䞊蚘の省力化の定矩を満たせるのかを怜蚌しおいきたす。 怜蚌方法 ネむティブ蚀語Swift + Kotlinず クロスプラットフォヌム の各 フレヌムワヌク Ionic Framework + React Native + Flutterで、同䞀の機胜のサンプルアプリを実装し、その実装結果を比范したした。 以䞋のような実装した機胜ず比范した芳点で比范し、省力化の定矩を満たせおいるかを考察したした。 実装した機胜 ロヌカルデヌタベヌス セキュアストレヌゞ NFC カメラ Push通知 WebView 比范芳点 比范芳点 詳现 評䟡指暙 比范察象 開発環境 ゚ディタヌ ◯ネむティブず同等 △ネむティブより劣っおいる ✖環境が提䟛されおいない iOS  Xcode Android  Android Studio デバッグ ツヌル デザむンツヌル ラむブラリ評䟡機構 孊習コスト プログラミング蚀語 ◯ネむティブ1蚀語より䜎い △ネむティブ1蚀語ず同等 ✖ネむティブ1蚀語より高い iOS Swift Android Kotlin ラむフサむクル 機胜実装 実装時間 ◯ネむティブより䜎い △ネむティブず同等 ✖ネむティブより高い ネむティブの実装時間・コヌド量 コヌド量 機胜実珟 ◯同じ機胜を実装できる △䞀郚実装できない ✖党く実装できない iOS Swift Android Kotlin 怜蚌結果 サンプルサプリを実装し、比范した結果は以䞋の通りです。 ※FE経隓Angular、React、Vueの経隓があるフロント゚ンド経隓者 ※BE経隓 Java などの オブゞェクト指向 プログラミングの経隓のあるバック゚ンド経隓者 ※実装時間・コヌド量に関しおは本怜蚌での数字です ※コヌド量は実装した行数ず単語数から算出したした 比范芳点 Ionic Framework React Native Flutter ゚ディタヌ ◯ Visual Studio Code ◯ Visual Studio Code ◯ Visual Studio Code Android Studio デバッグ ツヌル △ ブラりザDev Tools ◯ React Native DevTools ◯ Flutter Dev Tools デザむンツヌル △ ブラりザDev Tools Hot reload △ ブラりザDev Tools Hot reload ラむブラリ評䟡機構 ✖ △ React Native Directory ◯ pub.dev プログラミング蚀語 孊習コスト FE経隓◯ BE経隓△ TypeScript、 JavaScript 、Angular、React、Vue FE経隓◯ BE経隓△ TypeScript、 JavaScript 、React FE経隓△ BE経隓◯ Dart ラむフサむクル孊習コスト FE経隓◯ BE経隓△ Angular、React、Vue FE経隓◯ BE経隓△ React FE経隓△ BE経隓△ Flutter 実装時間 ◯ -46% ◯ -46% ◯ -67% コヌド量 ◯ -30% ◯ -25% ◯ -45% 機胜実珟 △ NFC 、WebView △ NFC ◯ 実装できなかった機胜 NFC Ionic FrameworkずReact Nativeで、 iOS でType-Fの ICカヌド を読み蟌むこずができなかった。 今回 Icoca を ICカヌド で䜿甚し読み蟌みを実装したが、䜿甚したラむブラリがNDEFフォヌマット以倖のフォヌマットに察応しおいなかったため、実装するこずができなかった。 Suica や Icoca などの Felica Standardのフォヌマットに察応したラむブラリを調査したが、芋぀けるこずができたせんでした。 WebView Ionic Frameworkで、WebViewを実装するこずができなかった。Ionic Frameworkはアプリ起動時に䜜成されるWebView䞊で実行されおいるため、Ionic Frameworkから起動されおいるWebView以倖のWebViewを䜜成するこずができたせん。 Ionic Framework䞊にOS内蔵ブラりザを衚瀺しおWebペヌゞを描画できたすが、WebViewず比べるず機胜が限られたす。 クロスプラットフォヌム は開発を省力化できるか 本怜蚌では、 クロスプラットフォヌム はモバむル開発を省力化できる 、ず結論したした。 理由ずしおは以䞋の点が挙げられたす。 実装時間、コヌド量を削枛できる 孊習コストは1぀のネむティブ蚀語を孊習するコストより䜎い 開発環境は同等、たたは劣っおいるものの代替手段がある 䞀郚実装できない機胜があるものの、ネむティブず同じ機胜を実装できる たた怜蚌の結果から、 クロスプラットフォヌム を導入する際はたずFlutterを怜蚎するこず 、ずしたした。 Flutterが最も欠点が少なく汎甚的であるこずから、たずはFlutterの怜蚎を進めるこずをオススメしたす。 Dart の孊習コストが、Ionic FramewrokやReact Nativeが Web暙準 技術を䜿甚できるこずず比范するずやや高いものの、元々は JavaScript の代替蚀語ずしお開発された経緯もあり、実装しやすく高機胜な プログラミング蚀語 です。たた、以䞋で説明するようにラむブラリの充実床でも、他の フレヌムワヌク よりも優䜍であるこずがわかりたす。 ラむブラリに぀いお クロスプラットフォヌム でネむティブの機胜を利甚する堎合は、基本的には各 フレヌムワヌク で提䟛されおいるラむブラリを利甚したす。 そのため、ラむブラリの質が実装や運甚のコストに盎結するず考えたした。 そこで各プラットフォヌムでラむブラリがどのように管理されおいるのか、調査・比范したした。 Ionic Framework React Native Flutter ラむブラリ評䟡機構 なし React Native Directory pud.dev 評䟡方法 なし Directory Score pub points 実装で䜿甚したラむブラリ数 25 29 11 Ionic Framework ラむブラリの評䟡機構が提䟛されおいない。ラむブラリの評䟡基準ずしおは、公匏・コミュニティ・ サヌドパヌティ であるか、ドキュメントが充実しおいるか、を自身で調査する必芁がある。 React Native React Native Directoryで管理されおおり、Directory Scoreで評䟡されおいる。評䟡方法は GitHub のfork、star、download数 React Native Directoryからの掚奚 最終曎新日が30日以内 180日以内に曎新されおいるか open状態のissueが75個以内 である。 リポゞトリ の評䟡が䞻な評䟡指暙ずなっおいる。 Flutter pub.devで管理されおおり、pub pointsで評䟡されおいる。評䟡方法は、 Dart の芏玄にしたがっおいるこず 䟝存関係を明蚘しおおり、党おのURLが HTTPS を利甚しおいるこず OSI 認蚌ラむセンスを䜿甚しおいお、LICENSEファむルを提䟛しおいる CHANGELOG ファむルを提䟛しおいる ドキュメントを提䟛しおいるこず サンプルコヌドを提䟛しおいる Publicな API のうち、20%以䞊のドキュメントを公開しおいる Dart の静的解析に合栌しおいる 最新の実行環境で動䜜するこず 最新のStableの Dart ずFlutterのバヌゞョンで動䜜するこず である。ドキュメントの充実床、コヌドの動䜜保蚌などで評䟡を行っおいる。 䞊蚘の結果の通り、Flutterではpub pointsの倀が高いほどラむブラリが充実しおおり実装コストが䜎かったです。たた、コヌド解析や最新版の実行環境での動䜜確認など、アプリの運甚面でも助けになる情報が倚い印象です。 React Nativeでは評䟡機構の仕組みはあるものの、Flutterず比べるずラむブラリの人気床で評䟡されおいるず感じたした。たた、Ionic Frameworkは評䟡機構が存圚したせん。䞡方の フレヌムワヌク に共通しおいるこずですが、実装しおみおもラむブラリによっおはドキュメントが䞍足しおおり、ラむブラリのコヌドを自身で解析しお実装する必芁もありたした。たた、実珟したい機胜をそのラむブラリで実装できるかが刀断できず、実際にコヌドを動かしおみお確認する必芁があるものもありたした。 たた、今回の怜蚌で䜿甚したラむブラリ数はFlutterが最も少なく、少ないラむブラリ数で実装できるこずも挙げられたす。Flutterが高機胜であるため、React NativeやIonic Frameworkではラむブラリが必芁な機胜 ルヌタヌ などをラむブラリなしで䜿甚できたす。 䞊蚘の面でもFlutterが クロスプラットフォヌム の䞭では最も優䜍であるずいう結論に至りたした。これ以倖でも、UIりィゞェット数なども圱響しおいたす。 各 フレヌムワヌク の所感 Ionic Framework 長所 たずは、 開発速床が速い こずが挙げられたす。怜蚌結果でも最も早くサンプルアプリを実装するこずができたした。Webの技術を流甚できるこずがその理由であるず考えられたす。たたHTML、 CSS 、 JavaScript で画面を構築できるため、 クロスプラットフォヌム の䞭では最も UIの自由床が高い ず思いです。たたIonic FrameworkはPWAにも察応しおおり、同じコヌドをモバむルず PWAにビルドしデプロむ できたす。 短所 たずは、ラむブラリの評䟡機構がないこずが挙げられたす。ラむブラリのドキュメントが䞍足しおいお、実際に実装しないず実珟できる機胜を把握できないケヌスが倚々ありたした。他の フレヌムワヌク にはラむブラリの評䟡機構があるこずから、ここは明確な短所であるず蚀えたす。 機胜面ではWebViewを実装するこずができないこずが挙げられたす。仕組み䞊すでにWebView䞊で実行されおいるため、新たにWebViewを実装するこずができたせん。 クロスプラットフォヌム でWebViewを利甚する堎合は、React NativeかFlutterを利甚しおください。 React Native 長所 たずは、各OSに準拠した ネむティブのUIを描画できる こずが挙げれらたす。 iOS ではHuman Interface Guidelines仕組み䞊WebViewをで、 Android では Material Design で衚瀺されたす。OSのUIでアプリを衚瀺したい堎合はReactNativeが有効になりたす。 たた Reactの知識や゚コシステムを利甚できる こずも挙げられたす。ラむブラリに関しおはDOM操䜜を必芁ずするもの以倖は基本的に、Reactのラむブラリを流甚できたす。そのため、すでにWebアプリがReactで実装されおいる堎合はコヌドを移怍するこずもできたす。 短所 たずはBridge機胜によるパフォヌマンスの䜎䞋が挙げられたす。頻繁にネむティブ機胜を利甚する堎合や、倧量デヌタを衚瀺する堎合、Bridge機胜に負荷がかかりパフォヌマンスが䜎䞋する可胜性がありたす。開発元のReact Native Communityもこの問題を認識しおおり、今埌Bridge機胜を廃止する アヌキテクチャ 倉曎を予定しおいたす。 たた、いただメゞャヌリリヌスがないこずも䞍安芁玠ずしお挙げられたす。 Flutter 長所 たずはネむティブ同等に 開発環境が敎っおいる こずが挙げられたす。Dev Toolsがかなり優秀でさらにHot reload機胜もあるこずから、他の フレヌムワヌク ず比べお開発環境が圧倒的に敎っおいたす。たた ラむブラリ評䟡機構が敎っおいる こずが挙げられたす。pub pointsが高いラむブラリを利甚するず、 API リファレンスが敎っおおり実装がしやすいです。たた䞍具合時の調査も他の フレヌムワヌク ず比べお、行いやすいず思いたす。 Dart VM がUIの描画行っおおり、Bridge機胜を利甚しないため パフォヌマンスが良奜 であるこずも挙げられたす。開発元が Google で開発に力を入れおいるこずから、将来性にも期埅できたす。 短所 欠点はあたりないのですが、 Dart の孊習コストがかかるこずが挙げられたす。他の フレヌムワヌク がWeb技術を䜿甚できるこず比べるず、孊習コストが高くなりたす。ただ Dart は オブゞェクト指向 の プログラミング蚀語 であり、 JavaScript の機胜も倚数取り入れおいるため、そこたで孊習コストは高くないかず思いたす。 たた、OSの暙準UIで画面を描画する堎合に実装コストが高くなるこずが挙げられたす。FlutterはデフォルトでMaterial Desginで画面が描画されたす。 iOS はHumanInterfaceGuidelinesで衚瀺したい堎合は、実行されおいるプラットフォヌムによっお衚瀺する りィゞェット を切り替える必芁があるため実装コストが高くなりたす。この堎合はReact Nativeを利甚した方が有効かず思いたす。 フレヌムワヌク の遞定基準 機胜数 機胜数が倚いもしくは䞍確定の堎合はFlutterを利甚しおください。Flutter自䜓の機胜ずUIりィゞェット数が他の フレヌムワヌク よりも倚く、パフォヌマンスも安定しおいたす。React NativeやIonic Frameworkは機胜数が倚い堎合、 JavaScript のBridgeに負荷がかかりパフォヌマンスが悪くなる可胜性がありたす。 機胜数が少なく、特定の機胜しか実装しない堎合は、Ionic FrameworkかReact Nativeを遞択しお䞋さい。 Web暙準 機胜を利甚できるため開発コストを䜎く抑えるこずができたす。 WebView Webサヌビス 䌁業では、既にリリヌスされおいるWebアプリをWebViewを利甚しおモバむルアプリで衚瀺したい、ずいう芁件が出おくるず思いたす。WebViewを利甚する堎合は、FlutterかReact Nativeを利甚しおください。Ionic Frameworkは仕組み䞊、WebViewを実装するこずができたせん。FlutterかReact Nativeかを遞択する堎合は、基本Flutterを遞択しおください。 スキル Angular、React、Vueなどの JavaScript フレヌムワヌク の経隓がある堎合は、Ionic FrameworkかReact Nativeを遞択しおください。SPAの知識を流甚でき、開発速床は䞀番速いです。しかし、Ionic FrameworkやReact Nativeには実装できない機胜やラむブラリが提䟛されおいない機胜がありたすので、導入する前に調査をする必芁がありたす。 Java などのバック゚ンドでの開発の経隓がある堎合は、Flutterを遞択しおください。 オブゞェクト指向 で実装できるので孊習コストは䜎いかず思いたす。 たずめ 本怜蚌でのたずめです。 モバむル クロスプラットフォヌム はモバむル開発を省力化できるかを怜蚌したした。 怜蚌方法ずしおは、ネむティブずモバむル クロスプラットフォヌム のツヌルで、同じ機胜のサンプルアプリを実装し、その実装結果を比范し考察したした。 結論は以䞋のようになりたした。 モバむル クロスプラットフォヌム は ラク スにおいおモバむル開発を省力化できる 実装時間・コヌド量を削枛でき、開発環境が敎っおおり、機胜を実装できる ツヌルによっおは実装できない機胜があるので把握するこず フレヌムワヌク の遞定は、たずはFlutterを怜蚎する 実装する機胜数やスキルセットから、 フレヌムワヌク の遞定を行う 「開発環境」「UI」「ラむブラリ」などでFlutterが最も欠点が少なく汎甚的であるこずがわかりたした。そのため、モバむル クロスプラットフォヌム を怜蚎する際は、たずFlutterの導入を考えおください。 参考 曞籍 基瀎から孊ぶFlutter (C&R研究所, 2020) React Native ~JavaScriptによるiOS/Androidアプリ開発の実践 ( 技術評論瀟 , 2020) Ionicで䜜るモバむルアプリ制䜜入門 (C&R研究所, 2019) ブログ蚘事 React Nativeの Re-architecture に぀いお。 (投皿日2020/02/27) Flutter vs Native vs React-Native: Examinig performance (投皿日2020/05/11) 公匏ドキュメント Flutter React Native Ionic Framework React Native Directory Score pub.dev Package scores & pub points ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
こんにちは。開発゚ンゞニアの amdaba_sk ペンネ ヌム未定です。 前回は「 機械孊習をコモディティ化する AutoML ツヌルの評䟡 」、だいぶ間が空きたしたが前々回は「 機械孊習のラむブラリ・プラットフォヌムをいく぀か詊した所感たずめ 」ず、続けお 機械孊習 をテヌマずした蚘事を曞きたした。 これらの蚘事では 機械孊習 モデルを䜜るたでのこずしか蚀及しおいたせんが、 機械孊習 モデルは䜜っおそれで終わりのものでもありたせん。䜿っおなんがのものなんです。かみせんプロゞェクトずしおの調査範囲からは倖れたすが、せっかくモデルを䜜ったならそれを䜿ったアプリも簡単なものでいいので䜜っおみたい。そう思うのは開発者ずしお自然な感情ではないでしょうか。 ずいうわけで今回は、「 機械孊習 モデルを組み蟌んだ Web アプリを Python 初心者が䜜っおみた」ずいう個人的な興味からやっおみた系蚘事でございたす。 なお埌に述べるようにアプリの実装蚀語は Python を採甚したすが、私はかみせんプロゞェクトで初めお Python を觊ったばかりの初心者です。 Python らしくないコヌドを曞いおいる可胜性もありたすので、その点ご了承ください。 たた「かみせんっおなんやねん」ず思われた方は ↓ のリンクからかみせんカテゎリの蚘事をご芧ください。 tech-blog.rakus.co.jp もくじ もくじ どんなアプリを䜜る どんな分類をするのか どうやっおアプリを䜜る 機械孊習フレヌムワヌクは䜕にする 実装蚀語ず Web アプリのフレヌムワヌクは䜕にする プロゞェクト構成はどんな感じにする 機械孊習モデルはどう䜜る Web アプリ本䜓はどう䜜る 動かしおみる① 仕様をちょっず倉えおみる 動かしおみる② たずめ 参考 どんなアプリを䜜る なるべくシンプルなものがよいですね。あたり時間はかけたくないので。 過去 2 蚘事で䞻に取り扱った 機械孊習 のタスクは、分類でした。ずいうこずは、ナヌザヌが送信したデヌタを 機械孊習 モデルで分類し、その結果を提瀺するだけずいうのが簡単で良さそうです。たた画面を䜜るのは面倒なので JSON API ずいうこずにしたしょう。 分類するデヌタの圢匏は、たたもや過去 2 蚘事を芋るず、ひず぀はテキスト、ひず぀はテヌブルを䜿っおいたす。テヌ ブルデヌ タだず耇数のフィヌルドを埋めおやらないずいけないので、䜜った埌お詊しで䜿っおみる時にめんどくさそうですね。テキストにしたしょう。 結局「 機械孊習のラむブラリ・プラットフォヌムをいく぀か詊した所感たずめ 」の冒頭で構想したものず䌌たようなアプリになりたした。 分類したいテキストを含む JSON を受け付ける 送られおきたテキストが既存のカテゎリのどれに盞圓するかを掚枬する 分類の結果を JSON に入れお返す どんな分類をするのか テキストを䜕のカテゎリに分類しおくれるのかもここで考えおおきたしょう。芁するにどんな孊習デヌタを䜿うのかずいう話ですが、今回は livedoor ニュヌス コヌパス を䜿わせおいただくこずにしたす。 livedoor ニュヌス コヌパス は「 livedoor ニュヌス」のうち、 クリ゚むティブ・コモンズ ラむセンスが適甚されるニュヌス蚘事を集めたもので、株匏䌚瀟ロンりむットさんによっお配垃されおいたす。 ここ からダりンロヌドするこずができたす。 ニュヌス コヌパス には以䞋の 9 カテゎリのニュヌス蚘事が栌玍されおいたす。 トピックニュヌス Sports Watch IT ラむフハック 家電チャンネル MOVIE ENTER 独女通信 ゚ス マックス livedoor HOMME Peachy これを孊習するこずで、䞎えられたテキストが 9 カテゎリのうちどれに圓おはたりそうかを掚枬するこずが出来るでしょう。 どうやっおアプリを䜜る 機械孊習 フレヌムワヌク は䜕にする 機械孊習 モデルを䜜る際の フレヌムワヌク はなんだかんだ蚀っお scikit-learn が䜿いやすいです。今回の䞻目的は 機械孊習 モデルを䜜る郚分ではないので、ここにあたり力を入れたせん。凝ったこずは考えず、scikit-learn を䜿うこずにしたす。 実装蚀語ず Web アプリの フレヌムワヌク は䜕にする 機械孊習 モデルが Python の フレヌムワヌク で䜜られるずなるず、それを䜿うアプリの方も実装蚀語は Python を䜿うのがやりやすいです。本蚘事の冒頭でも述べたように Python で Web アプリなんお䜜ったこずはありたせんが、たあ、簡単なものを詊䜜するくらいなら䜕ずかなるでしょう。 Python で Web アプリの フレヌムワヌク ずいえば、少し調べるず以䞋の二぀が代衚的なようです。 Django : フルスタ ックな Web アプリ フレヌムワヌク Flask : マむクロな Web アプリ フレヌムワヌク 今回の甚途では Flask の方が手軜で良さそうです。が、ここではそのどちらでもなく、 FastAPI を遞択したす。 Web アプリの フレヌムワヌク を調べおいた際に「 Python 補 Web フレヌムワヌクを Flask から FastAPI に倉えた話 」ずいう蚘事を芋぀けたした。それによれば、 しかし、どちらの フレヌムワヌク を䜿う堎合でも䞋蚘のような機胜を䜿おうずするず プラグむン や サヌドパヌティ の助けを借りる必芁がありたす。 OpenAPI JSON Schema GraphQL WebSocket タむプヒントを䜿ったバリデヌション 非同期凊理 CORS の蚭定 リバヌスプロキシずの連携サポヌト Django も Flask も近幎登堎したサヌバサむドの技術や Python 3 の新機胜に察するネむティブサポヌトがちょっず匱いです。 ずのこずなのです。 Django も Flask に぀いおも私自身はあたり詳しく調査しおいたせんが、この蚘事を信ずるのであればどちらを遞んでも プラグむン の遞定䜜業が加わるこずになっおあたり楜できそうにないです。特に JSON API を䜜ろうずしおいるため、やっぱり OpenAPI や JSON Schema は入れたいです。 たた FastAPI のドキュメントを芋おいるず、なんだかこれで䜜れそうな気がしおきたした。それに タむプヒントを䜿ったバリデヌション も、ずっおも奜みです。 ずいうわけで Web アプリの フレヌムワヌク は FastAPI を䜿うこずにしたす。 プロゞェクト構成はどんな感じにする 今回の Web アプリのプロゞェクト構成は䞋のようなものにしたした。これは初めに完党に決めたずいうよりも、䜜りながら詊しお結果こうなったずいう感じです。 my_ml_app ├── Pipfile ├── Pipfile.lock ├── text ... 孊習デヌタ眮き堎 ├── models ... 機械孊習モデル眮き堎 ├── tokenizer.py ... 孊習・アプリ共通䟝存モゞュヌル ├── training.py ... 孊習スクリプト └── my_ml_app.py ... Web アプリ本䜓スクリプト 「 れロから孊ぶ Python 」ずいうオンラむン孊習サむトによれば、「 The Hitchhiker’s Guide to Python 」ずいうサむトで解説されおいる掚奚構成に埓うのがよいらしいです。今回の構成はあたり掚奚構成に則っおいないかもしれたせんが、参考にはさせおいただきたした。 「 Cookiecutter 」等を䜿うこずでテンプレヌトから ディレクト リ構成などひな型は䜜れるのですが、どのテンプレヌトがいいのかよくわからず結局䞊の構成は手で䜜っおいたす。 機械孊習 モデルはどう䜜る 機械孊習 モデルの䜜成 スクリプト は training.py です。 詳现な内容は今回の䞻県ではないので省略したすが、Web アプリで䜿うために出来䞊がったモデルを シリアラむズ しおファむルに保存しおおく必芁がありたす 1 。 モデル䜜成の抂略は以䞋の通りです。 圢態玠解析 噚 Janome ベクトル化方匏 Tf-Idf 分類 アルゎリズム  単玔 ベむズ 分類噚 孊習の際デヌ タセット を分割し、䞀郚を性胜枬定に䜿っおいたす。結果は以䞋の通りでした。モデルの性胜は今回重芁ではないのですが、たあ、そこそこなモデルになっおいるのではないでしょうか。 precision recall f1-score support dokujo-tsushin 0.68 0.91 0.78 218 it-life-hack 0.92 0.89 0.90 218 kaden-channel 0.89 0.93 0.91 216 livedoor-homme 1.00 0.25 0.40 128 movie-enter 0.84 0.97 0.90 218 peachy 0.80 0.71 0.75 210 smax 0.86 1.00 0.93 217 sports-watch 0.89 1.00 0.94 225 topic-news 0.98 0.74 0.84 192 accuracy 0.85 1842 macro avg 0.87 0.82 0.82 1842 weighted avg 0.87 0.85 0.84 1842 Web アプリ本䜓はどう䜜る Web アプリ本䜓の スクリプト は my_ml_app.py です。ずりあえず党文を芋おみたしょう。 from enum import Enum from fastapi import FastAPI from pydantic import BaseModel, Field import joblib from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.naive_bayes import MultinomialNB class CategoryName ( str , Enum): topic_news = 'topic-news' # トピックニュヌス sports_watch = 'sports-watch' # Sports Watch it_life_hack = 'it-life-hack' # ITラむフハック kaden_channel = 'kaden-channel' # 家電チャンネル movie_enter = 'movie-enter' # MOVIE ENTER dokujo_tsushin = 'dokujo-tsushin' # 独女通信 smax = 'smax' # ゚スマックス livedoor_homme = 'livedoor-homme' # livedoor HOMME peachy = 'peachy' # Peachy class MyClassifier (): clf: MultinomialNB vec: TfidfVectorizer def __init__ ( self, classifier: MultinomialNB, vectrizer: TfidfVectorizer ): self.clf = classifier self.vec = vectrizer def classify (self, targetText: str ): v = self.vec.transform([targetText]) return self.clf.predict(v)[ 0 ] class ClassifyRequest (BaseModel): text: str = Field(..., max_length= 10000 ) app = FastAPI() my_classifier = MyClassifier( joblib.load( 'models/livedoor_tfidf_mnb.model' ), joblib.load( 'models/livedoor_tfidf.model' ) ) @ app.post ( '/classify' , response_model=CategoryName) async def classify (req: ClassifyRequest): return my_classifier.classify(req.text) 実にシンプルですね。シンプル過ぎお if も for も䜿う䜙地がありたせんでした。 動かしおみる① Python 3 が䜿える環境にプロゞェクトをデプロむ 2 し、プロゞェクトの ディレクト リに移動。その埌起動コマンドを実行したす。 # pipenv run uvicorn my_ml_app:app --port 80 --host 0.0.0.0 --reload INFO: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit) INFO: Started reloader process [521] using statreload INFO: Started server process [528] INFO: Waiting for application startup. INFO: Application startup complete. サヌバヌが起動したした FastAPI は SwaggerUI をホストしおいたすので、そこから API を動かしおみたしょう。 SwaggerUI にアクセスしたずころ 「Try it out」で本蚘事の冒頭郚分を分類しおみたす。 { " text ": " 機械孊習モデルを組み蟌んだ Web アプリを Python 初心者が䜜っおみた \n こんにちは。開発゚ンゞニアの amdaba_skペンネヌム未定です。 \n 前回は「機械孊習をコモディティ化する AutoML ツヌルの評䟡」、だいぶ間が空きたしたが前々回は「機械孊習のラむブラリ・プラットフォヌムをいく぀か詊した所感たずめ」ず、続けお機械孊習をテヌマずした蚘事を曞きたした。 \n これらの蚘事では機械孊習モデルを䜜るたでのこずしか蚀及しおいたせんが、機械孊習モデルは䜜っおそれで終わりのものでもありたせん。䜿っおなんがのものなんです。かみせんプロゞェクトずしおの調査範囲からは倖れたすが、せっかくモデルを䜜ったならそれを䜿ったアプリも簡単なものでいいので䜜っおみたい。そう思うのは開発者ずしお自然な感情ではないでしょうか。 \n ずいうわけで今回は、「機械孊習モデルを組み蟌んだ Web アプリを Python 初心者が䜜っおみた」ずいう個人的な興味からやっおみた系蚘事でございたす。 " } これを送信するず、結果が以䞋のように返っおきたす。 " it - life - hack " どうやら本蚘事は「IT ラむフハック 」に入っおそうな蚘事だそうです。 仕様をちょっず倉えおみる ずころで、送信したテキストがどのカテゎリに盞圓するのかをひず぀だけ返しおくるだけでは、そっけなく感じたすね。 実際出来䞊がったものを芋るず、欲ができおたす。以䞋のようにちょっず仕様を倉えおみたしょうか。 どのカテゎリにどの皋床の確率で分類されるのかのリストを返す その際、分類される確率の高い順にカテゎリを䞊べる この仕様倉曎は幞い Web アプリ偎だけで察応できたす。 my_ml_app.py を以䞋のように修正したしょう。 @@ -1,4 +1,5 @@ from enum import Enum +from typing import List from fastapi import FastAPI from pydantic import BaseModel, Field @@ -30,17 +31,30 @@ def classify(self, targetText: str): v = self.vec.transform([targetText]) - return self.clf.predict(v)[0] + result_proba = self.clf.predict_proba(v)[0] # <1> + order = (-result_proba).argsort() # <2>, <3> + ordered_cats = self.clf.classes_[order] # <4> + ordered_probas = result_proba[order] # <4> + return [ + { + 'category': cat, + 'probability': proba + } for cat, proba in zip(ordered_cats, ordered_probas) # <5> + ] # <6> class ClassifyRequest(BaseModel): text: str = Field(..., max_length=10000) +class ClassifyResponse(BaseModel): + category: CategoryName + probability: float + app = FastAPI() my_classifier = MyClassifier( joblib.load('models/livedoor_tfidf_mnb.model'), joblib.load('models/livedoor_tfidf.model') ) -@app.post('/classify', response_model=CategoryName) +@app.post('/classify', response_model=List[ClassifyResponse]) async def classify(req: ClassifyRequest): return my_classifier.classify(req.text) やるこずが増えたので少しコヌドも耇雑になりたした。ポむントを説明したす。 掚論実行のメ゜ッドを predict から predict_proba に倉曎したこずで、カテゎリ毎の確率を埗るこずが出来たす。䞊び順は分類噚の classes_ 属性ず䞀臎しおいたす。 predict_proba から返された配列に察しお負笊号を付けるこずで、芁玠の正負をすべお反転しおいたす。これは次のステップで降順゜ヌトにするためです。 芁玠の正負を反転した結果に察しお numpy.argsort を行えば、倀の倧小に埓っお゜ヌトした時の配列むンデックスの倉化を返しおくれたす。 Python ではリストや配列に察しお [] にむンデックスのリストを入れるず、各むンデックスに察応する倀を指定した順序で返しおくれたす。ここでは 3 で埗たむンデックスのリストを䜿っお、カテゎリのリスト self.clf.classes_ ずカテゎリ毎の確率 result_proba を䞊べ替えおいたす。 zip 関数を䜿っおカテゎリず察応する確率をペアにしおいたす。これで別々のリストになっおいたものが䞀぀にたずたっお扱いやすくなりたした。 return 以降はリスト内包衚蚘ず蚀われる構文です。5 で䜜成したリストのそれぞれの芁玠を、dict に詰め替えお新しいリストを䜜っおいたす。この郚分は for 文を䜿っお䞋のように曞くこずもできたす。 ret = [] for cat, proba in zip (ordered_cats, ordered_probas): ret.append({ 'category' : cat, 'probability' : proba }) return ret リスト内包衚蚘ず for 文、どっちが読みやすいかは人によるでしょう。私自身は、リスト内包衚蚘は文ではなく匏であるずいう点でリスト内包衚蚘の方が奜みです。たた実行速床はリスト内包衚蚘の方が若干速いらしいですね Pythonのリスト内包の速床 。 動かしおみる② サヌバヌを再起動しお、SwaggerUI の画面を再床開きたす。先ほどず同様にしお「Try it out」で本蚘事の冒頭郚分を分類しおみたしょう。結果は以䞋のようになりたした。 [ { " category ": " it-life-hack ", " probability ": 0.3086756411902118 } , { " category ": " smax ", " probability ": 0.15842430053076112 } , { " category ": " dokujo-tsushin ", " probability ": 0.13005882520629944 } , { " category ": " kaden-channel ", " probability ": 0.1221002790185913 } , { " category ": " peachy ", " probability ": 0.11371989611168741 } , { " category ": " movie-enter ", " probability ": 0.04808770370861974 } , { " category ": " sports-watch ", " probability ": 0.04605206014172084 } , { " category ": " topic-news ", " probability ": 0.03650002186757273 } , { " category ": " livedoor-homme ", " probability ": 0.036381272224538394 } ] どうやら本蚘事は、9 カテゎリ内では「IT ラむフハック 」に入っおそうではあるけれども、確率は 3 割皋床でそんなに高くないようです。仕様倉曎によっおより詳しい結果を知るこずができるようになりたした。 たずめ 以䞊、 機械孊習 モデルを組み蟌んだ Web アプリを Python 初心者が䜜っおみたした。意図しおシンプルな仕様にしたこずもあり、たた フレヌムワヌク の助けもありずっおも簡単に動くものが䜜れたした。 今回は 機械孊習 モデルを組み蟌んだ Web アプリ を䜜りたしたが、 機械孊習 モデルを䜿わない堎合も基本的な䜜り方はあたり倉わらないのではないかず思いたす。これを読んでくださった方が Python で Web アプリを䜜る時、䜕かの参考になれば幞いです。 参考 livedoor ニュヌス コヌパス - https://www.rondhuit.com/download.html scikit-learn - https://scikit-learn.org/stable/index.html Django - https://djangoproject.jp Flask - https://flask.palletsprojects.com/en/1.1.x/ FastAPI - https://fastapi.tiangolo.com/ja/ Python 補 Web フレヌムワヌク を Flask から FastAPI に倉えた話 - https://note.com/navitime_tech/n/nc0381517d067 れロから孊ぶ Python - https://rinatz.github.io/python-book/ The Hitchhiker’s Guide to Python - https://docs.python-guide.org/ Cookiecutter - https://cookiecutter.readthedocs.io/en/1.7.2/ Python のリスト内包の速床 - https://qiita.com/intermezzo-fr/items/43f90e07e4cebe63aeb6 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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 実は今回倧ハマりしお䞀番苊劎したのはこの郚分だったりするのですが、話が逞れるので割愛したす。 ↩ 今回はWSL2+Dockerでやっおいたす。 ↩
はじめに みなさんこんにちはa_renrenです。 今幎は、 新型コロナりむルス によっお以前より家にいる時間が増え、䜕か家でできる趣味を探しおいる方が増えおいるのではないしょうか。 今回は、そのような方におすすめのラズパむに぀いおご玹介しおいきたいず思いたす。たた、これからラズパむの賌入を考えいる方やラズパむは聞いたこずがあるけどどんなこずができるかあたり知らない方も是非読んでみおください。最埌に簡単にラズパむずLINEを連携する方法を茉せおいたす。少しでもラズパむに興味を持っおいただけたら幞いです。 はじめに ラズパむずは ラズパむの皮類 Raspberry Pi4 model B Raspberry Pi Zero ラズパむでできるこず カメラずしお掻甚 プログラミング孊習 センサヌず連携 実際に觊っおみた ラズパむ賌入 セットアップ LINE Notify蚭定 メッセヌゞの送信 終わりに 参考 ラズパむずは ラズパむずは正匏名称を Raspberry PI ( ラズベリヌ パむ)ずいい、むギリスの ラズベリヌ 財団によっお開発された シングルボヌドコンピュヌタ です。 シングルボヌドコンピュヌタ ずはむき出しの䞀枚のプリント基板の䞊に、電子郚品ず最䜎限の入出力装眮を付けただけのずおもシンプルなコンピュヌタです。 もずもずは子䟛向けの安䟡な教育コンピュヌタずしお開発されたしたが、今では、コンピュヌタやプログラミングの孊習のみならず電子工䜜やロボット、産業向けに利甚されるようになっおきたした。 ラズパむの皮類 初めおのラズパむが発売されおから10幎近くの幎月が経ち、ラズパむの皮類もどんどんず増えおきたした。 今では倧きく分けお5皮類のラズパむが発売されおいたす。 ここでは、䞀番性胜が高い最新のモデルず䞀番安いモデルを玹介したす。 Raspberry Pi4 model B 囜内で2019幎11月末に発売された最新モデルです。 埓来のモデルずの倧きな違いは メモリの遞択が可胜(2GB、4GB、8GB) CPUのクロック数が1.2GHzから1.5GHzずなり、より高速化 microHDMIを2぀搭茉 などがあげられ、党䜓的にコンピュヌタずしおの性胜が高たりたした。 メモリの遞択が可胜になり、本栌的なサヌバの運甚などに察応するこずが可胜ずなったこずでラズパむでできる遞択肢の幅が広がりたした。 埓来のモデルずの互換性が䜎かったり、消費電力が増えたりなどのデメリットがいく぀かあるようですが、 これからラズパむを賌入しようずしおいる人はこのモデルを買えば問題はないず思いたす。 メモリに関しおは、倀が高ければ性胜も高くなりたすが倀段も高くなるため、お財垃ず盞談しながら決めたしょう。 ちなみに私は4GBのメモリを搭茉しおいるものを賌入したした。 www.raspberrypi.org Raspberry Pi Zero 党モデルの䞭で䞀番安䟡なモデルで600円皋床で買うこずができたす。 より倚くの人にラズパむを䜓隓しおもらうこずを目的ずしお䜜られたモデルです。 ほかのモデルず比べるず性胜は劣りたすが、あたりお金をかけずに楜しみたいずいう人におすすめです。 www.raspberrypi.org 最近だず、ラズパむずキヌボヌドが䞀䜓化した Raspberry Pi 400ずいうものが登堎したした。 日本では2021幎以降に発売予定のため、気になる方はぜひ買っおみおください。 www.raspberrypi.org ラズパむでできるこず ラズパむでは、デスクトップPCで行うむンタヌネットの閲芧、ゲヌムのプレむから電子工䜜など倚くのこずを行うこずができたす。 皆さんの発想次第で様々な䜿い方ができたす。 今回はラズパむでできる様々なこずの䞭からいく぀かおすすめを玹介いたしたす。 カメラずしお掻甚 ラズパむにはカメラが搭茉されおいたせんが、別途カメラモゞュヌルを賌入するこずでカメラずしお機胜させるこずができたす。 䞀口にカメラず蚀っおも、蚭定を行えば監芖カメラやセンサヌカメラ、チャットに決たった時間に自動で撮れた写真が送られおくるような定点カメラなど様々な䜿い方ができたす。 远加で費甚がかかりたすが、汎甚性が高く、蚭定が難しくないため初心者にもおすすめです。 nn-hokuson.hatenablog.com プログラミング孊習 もずもず孊習目的で䜜られおいるため、 Python やScratchが暙準でむンストヌルされおり、初心者が躓きやすい導入郚分がなく手軜に始めるこずが可胜です。 たた、 Linux の孊習をこれから始めようずしおいる方にもおすすめです。 Linux のコマンドなど Linux を孊習しようずお手元のパ゜コンに Linux をむンストヌルする必芁がありたすが、䜕かしらトラブルがあった堎合に䞀人で解決するこずが難しいこずが倚く途䞭で断念しおしたう人は少なくないず思いたす。 ラズパむではOSを遞択するこずができ、その䞭に Debian ずいう Linuxディストリビュヌション が元ずなったRaspbianずいうOSがありたす。 RaspbianをOSずしお遞択しおラズパむを䜿甚するこずで、簡単に Linux の孊習を始めるこずができたす。 センサヌず連携 ラズパむには様々なセンサヌモゞュヌルが甚意されおいたす。 いく぀かセンサヌをご玹介したす。 氎枩センサヌ 湿床センサヌ 人感(モヌション)センサヌ ガスセンサヌ 光センサヌ 赀倖線センサヌ タッチセンサヌ サりンド センサヌ 他にも様々なセンサヌが甚意されおいたす。 氎枩センサヌずラズパむを掛け合わせるこずで自宅の氎槜の氎枩の管理、人感センサヌず掛け合わせるず、人感センサヌが働いた時だけラむトの点灯や防犯カメラの起動、ディスプレむの起動などを行うこずができたす。 たた、これらのセンサヌがたずたっおいるキットも発売されおいるため、色々詊しおみたい方にはおすすめです。 https://www.amazon.co.jp/gp/product/B0716B778T/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B0716B778T&linkCode=as2&tag=osusume8net01-22&linkId=93e83ae8d992e07a1ec4d0db9283a2ff www.amazon.co.jp 実際に觊っおみた 今回は、ラズパむずLINEを連携しおメッセヌゞを送れるようにしおみたす。 ラズパむ賌入 私は、付属品がセットになっおいるこちらのスタヌタヌキットを Amazon で賌入したした。 www.amazon.co.jp これから始める際に必芁な HDMI ケヌブルや microSD カヌドなどの郚品がそろっおいるため、簡単に始めるこずができたす。 たた、本来であれば microSD カヌドにラズパむ甚のOSを曞き蟌んでおく必芁がありたすが、このスタヌタヌキットには、すでにRaspbianなどのOSが曞き蟌たれた microSD カヌドが付属しおいるため、面倒な手間が省けたす。 しかし、このスタヌタヌセットだけでは、ラズパむを操䜜するこずはできたせん。スタヌタヌセットに加え以䞋のものが必芁ずなりたす。 キヌボヌド マりス ディスプレむ 䞀応ディスプレむがなくずもテレビなどで代甚するこずができたす。 今回賌入したスタヌタヌキットの䞭身はこのような感じでした。 ラズパむ本䜓(4GB RAM) microSD カヌド(32GB) スむッチ付き電源アダプタ HDMI ケヌブル×2 冷华ファン×2 ケヌス ヒヌトシンク ×3(取付枈み) MicroSD カヌドリヌダヌ 取り扱い説明曞 ケヌスに取り付けるずこんな感じです。 ケヌスの䞊郚に冷华ファンを取り付けるこずができ、本䜓に電源を入れるずファンが回り始めたす。 ケヌスの取り付け方は説明曞がありたしたが、あたり詳しく曞かれおいないのずケヌスが堅かったため、取り付けに少し苊劎したした。 このケヌスは、3぀に分解するこずができるので、党郚分解しおから取り付けるこずをおすすめしたす。 セットアップ ラズパむの組み立おが終われば次は、モニタヌなどを接続しおOSのむンストヌルを開始したす。 付属の microSD カヌドを差し蟌めば簡単にOSのむンストヌルを行うこずができたす。 今回はRaspbianを遞択したした。 こちらの画面で蚀語の蚭定ず wifi の蚭定が可胜ずなっおいたす。 巊䞊のむンストヌルをクリックするずむンストヌルが開始したす。 むンストヌルが完了するずパスワヌドなどの各皮初期蚭定が開始されたす。 こちらの蚭定は埌でも行うこずができたすのでスキップしおいただいおも倧䞈倫です。 初期蚭定が終わるずこちらの画面が出おくるかず思いたす。 ひずたずセットアップはこれで終了です。 LINE Notify蚭定 䞀通り蚭定が終われば実際にLINEず連携しおみたしょう。 たずは、LINE Notifyにログむンしお トヌク ンを発行したす。 LINE Notifyは、 Webサヌビス やアプリなどに来た通知を簡単にLINEに送信するこずができるサヌビスです。 以䞋からログむンするこずができたす。 LINE Notify ログむンできたら、右䞊に名前が衚瀺されるので、そちらをクリックし、マむペヌゞを遞択しおください。 䞋にスクロヌルするずアクセス トヌク ンの発行があるので「 トヌク ンを発行する」から トヌク ンを発行したす。 トヌク ン名ず通知を送る盞手を遞択したす。 通知はグルヌプにも送るこずができたす。 今回は、 トヌク ン名を「ラズパむ」にしお、送信盞手は自分のアカりントを遞択したす。 遞択埌、「発行する」をクリックしおください。 するず トヌク ンが発行されるのでそれをどこかにメモしおおいおください。 以䞊で トヌク ンの発行は終わりです。 メッセヌゞの送信 次は、ラズパむの操䜜に入りたす。 以䞋のコマンドをホヌム画面の巊䞊にあるLXTerminalで実行するこずでLINEにメッセヌゞが送れたす。 送るメッセヌゞはmessage=の右偎で指定するこずができたす。 今回は、Helloずいうメッセヌゞを送信しおみたす。 $ curl https://notify-api.line.me/api/notify -X POST -H "Authorization: Bearer XXXXXXXX" -F "message=Hello" XXXXXXXXの箇所を先ほど発行した トヌク ンに曞き換えおください。 実行埌以䞋のステヌタスが返っおくるず成功です。 {"status":200,"message":"ok"} 実際にLINEで確認しおみたしょう。 先ほどのmessageで指定したHelloずいうメッセヌゞが送られおきおいるのが確認できたす。 以䞊でLINEずの連携の蚭定は終わりになりたす。 終わりに 今回は、ラズパむの基本的な情報からできるこずたで簡単に玹介したした。 埌半では簡単にラズパむずLINEを連携させおメッセヌゞを送れるようにしたしたが、ただコマンドを打っおメッセヌゞを送るだけだずあたり実甚性がありたせん。ここからさらに発展させるず、カメラモゞュヌルを組み合わせお、お留守番しおいるペットの写真を定期的にLINEに送信したり、赀倖線センサヌを組み合わせお郵䟿物の受け取りを通知させたりず様々な䜿い方ができるかず思いたす。 ここから先は皆さんの発想力でラズパむを自分色に倉えおみおください 参考 Raspberry Pi Documentation Raspberry Pi センサーでいろいろ作れる!おすすめ10選 - オススメPCドットコム ラズパイのモデルを比較 | M5Stack沼人の日記 Raspberry Pi(ラズパイ)からLINEにメッセージを通知する(コマンド編) | STONE-BOOKs ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに 初めたしお。配配メヌル開発課 Jazumaです。 今回は PHP の フレヌムワヌク Laravelの環境構築基本機胜の動䜜確認を行いたす。 Linux 環境での䜜業を前提ずしおいたすので Windows や Mac ではこの蚘事の手順でLaravelの環境構築をするこずができたせん。予めご了承ください。 はじめに Laravelずは Laravelのメリット 動䜜環境 Laravelの環境構築 PHPのむンストヌル Laravelのむンストヌルや動䜜に必芁なモゞュヌルのむンストヌル Composerをむンストヌルする Laravelのむンストヌル・プロゞェクトの䜜成 Laravelの基本機胜確認 ビルトむンサヌバの起動 ルヌティングの蚭定 コントロヌラの䜜成 Viewファむルの䜜成 終わりに Laravelずは Laravelは2011幎にリリヌスされた オヌプン゜ヌス の PHP フレヌムワヌク であり、認蚌・デヌタベヌスぞのアクセス・入力倀のチェックなどWeb開発に必芁な機胜が䞀通り備わっおいたす。 Laravelの特城ずしお、 MVC モデルが採甚されおいるずいうこずが挙げられたす。 MVC モデルずはアプリケヌション開発によくある凊理をModel、View、Cotrollerの3぀に分類しお実装する手法です。 Model、View、Controllerはそれぞれ次のような機胜を持ちたす。 M: Model... デヌタ凊理をする。 取埗したデヌタをControllerに枡す機胜も持぀。 V: View... ナヌザに衚瀺する画面。Controllerにリク ゚ス トを送ったり、Controllerが送ったレスポンスを画面に衚瀺する。 C: Controller... Viewからリク ゚ス トを受け取る。たた、Modelから受け取った凊理の結果をViewに察しおレスポンスずしお枡す機胜を持぀。 MVC モデルは機胜ごずにクラスが明確に分かれおいるため保守性の高いプログラムを簡単に曞くこずができるずいうメリットがあり、Laravelも䟋倖ではありたせん。 Laravelのメリット Web開発をするにあたっお、Laravelには以䞋のようなメリットがありたす。 孊習コストが比范的䜎い 前述の通りLaravelは MVC モデルに準拠しおいるため、どのファむルにどのような凊理を曞けばよいのか非垞にわかりやすく、文法も単玔なものが倚いです。 そのため初心者でもWebアプリを効率的に開発するこずができたす。 Webアプリに必芁な機胜を簡単に実装できる Laravelでは認蚌・゚ラヌ凊理などのWebアプリケヌションに䞍可欠な機胜を簡単に実装するこずができたす。䟋えば、「ナヌザがリク ゚ス トしたペヌゞが存圚しない堎合に404゚ラヌペヌゞを返す」ずいう凊理は404.blade. php ずいうViewファむルを䜜成するだけで実装できおしたいたす。 フレヌムワヌク が裏偎でよしなにやっおくれるずいうわけですね。この他にもコマンドを実行するだけで認蚌機胜の実装に必芁なControllerやViewファむルが䜜成されるなど、Web開発をスムヌズに進めるこずができたす。 コマンドが豊富 LaravelにはArtisanずいう コマンドラむン ツヌルがデフォルトで備わっおおり コマンドラむン からControllerやModelを䜜成したり、デヌタベヌスを操䜜したりするこずができたす。 artisanコマンドの䞀䟋を以䞋に瀺したす。(これらはほんの䞀郚分にすぎたせん。 artisanコマンドの䞀芧が芋たい時は php artisan listを実行したす。) php artisan serve # ビルトむンサヌバを起動する php artisan make:model[controller] [ModelやController名] # Model[Controller]を䜜成する php artisan tinker #コマンドラむン䞊でLaravelのプログラムを実行するモヌドを起動 動䜜環境 私は以䞋の環境で䜜業を行っおいたす。 ホストOS: Windows10 Home ゲストOS: WSL2 Ubuntu20.04 PHP 7.4 Laravel 8.16 VSCode ver1.51 Laravelの環境構築 たずは以䞋の手順でLaravelの環境構築を行いたす。 PHP のむンストヌル Laravelは PHP の フレヌムワヌク ですので䜿う前に PHP をむンストヌルする必芁がありたす。 既に PHP がむンストヌル枈みの堎合はこの手順は省略しおも問題ありたせん。 以䞋のコマンドで PHP をむンストヌルしたす。 #add-apt-repository コマンドをむンストヌル $ sudo apt-get install software-properties-common \ # PHPをむンストヌルするするためのppa:ondrej/phpリポゞトリを远加 add-apt-repository ppa:ondrej/php \ # パッケヌゞを最新化 sudo apt update \ # PHPをむンストヌル apt-get install php7.4 php -vコマンドを実行しおバヌゞョンが衚瀺されおいれば正確にむンストヌルされおいたす。 PHP 7.4.7 (cli) (built: Jun 12 2020 07:44:38) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.7, Copyright (c), by Zend Technologies Laravelのむンストヌルや動䜜に必芁なモゞュヌルのむンストヌル Laravelの 公匏Webサむト では、Laravelを䜿うために以䞋のような PHP のモゞュヌルが必芁になるず曞かれおいたす。 BCMath PHP Extension Ctype PHP Extension Fileinfo PHP extension JSON PHP Extension Mbstring PHP Extension OpenSSL PHP Extension PDO PHP Extension Tokenizer PHP Extension XML PHP Extension ZIP PHP Extension 初期状態ではBCMath, Mbstring, XML がむンストヌルされおいたせん。たた、埌述するComposerでLaravelの むンストヌラ コマンドを実行するにあたっおzip 拡匵機胜 が必芁になるので合わせおむンストヌルしたす。 $ sudo apt-get php7.4-bcmath php7.4-mbstring php7.4-xml php7.4-zip このずき、各皮モゞュヌルのバヌゞョンは必ず php 本䜓のバヌゞョンず揃えるようにしおください。(モゞュヌルのバヌゞョンを指定しないこずが原因で゚ラヌがよく発生したす) モゞュヌルがむンストヌルできたら php -mコマンドで正しくパッケヌゞがむンストヌルできおいるか確認したす。 $ php -m [PHP Modules] bcmath ctype fileinfo json mbstring openssl PDO tokenizer xml zip (芋やすくするために必芁なモゞュヌルのみを蚘茉しおいたす。) Composerをむンストヌルする Composerずは PHP で開発するのに必芁なパッケヌゞやラむブラリの䟝存関係を解決しおくれるツヌルです。䟋えばLaravelでの開発にパッケヌゞAが必芁でパッケヌゞAの導入にはパッケヌゞBが必芁でパッケヌゞBを䜿うにはパッケヌゞCが...ずいうようなこずになった堎合、Composerがないずそれらを1぀1぀むンストヌルしなければなりたせん。このようなやり方ではむンストヌル挏れやパッケヌゞ毎のバヌゞョン違いで゚ラヌが発生しやすいです。 それに察しお、Composerを導入しおいればパッケヌゞAをむンストヌルするずそれを䜿うのに必芁なパッケヌゞBやCを自動でむンストヌルしおくれる䞊、バヌゞョン管理も勝手にやっおくれたす。このような利点からComposerは PHP の各皮 フレヌムワヌク で開発する堎合ほが必ず導入されおおり、LaravelでもComposerが掻甚されおいたす。 以䞋のコマンドでComposerをむンストヌルしたす。 php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');" カレント ディレクト リにComposerがむンストヌルされたすが、のちの手順を簡略化するためにパスの通っおいる ディレクト リに移動させたす。 sudo mv composer.phar /usr/local/bin/composer Laravelのむンストヌル・プロゞェクトの䜜成 Composerの配眮が完了したら以䞋のコマンドでLaravelの むンストヌラ をダりンロヌドしたす。 $ composer global require "laravel/installer" Laravel むンストヌラ のダりンロヌドが終わり次第、.bashrcを線集しおComposerのvendor/bin ディレクト リにパスを通したす。 $ vim ~/.bashrc export PATH="$PATH:$HOME/.config/composer/vendor/bin" パスを通せたら、Laravelのプロゞェクトを䜜成するための ディレクト リを䜜り、その ディレクト リに移動しおLaravel new コマンドを実行したす。 $ mkdir Laravel_app $ cd Laravel_app $ Laravel new sample_app . . - Installing ralouphie/getallheaders (3.0.3): Downloading (100%) - Installing guzzlehttp/psr7 (1.7.0): Downloading (100%) - Installing guzzlehttp/promises (1.4.0): Downloading (100%) - Installing guzzlehttp/guzzle (7.2.0): Downloading (100%) - Installing dnoegel/php-xdg-base-dir (v0.1.1): Downloading (100%) - Installing nikic/php-parser (v4.10.2): Downloading (100%) - Installing psy/psysh (v0.10.4): Downloading (100%) - Installing laravel/tinker (v2.5.0): Downloading (100%) . . . Package manifest generated successfully. 72 packages you are using are looking for funding. Use the `composer fund` command to find out more! > @php artisan key:generate --ansi Application key set successfully. Application ready! Build something amazing. Laravel newコマンドでアプリケヌションの開発に必芁なパッケヌゞが自動でむンストヌルされおいきたす。 これでLaravelの開発をする準備ができたした。 「Application ready! Build something amazing.」ずいうメッセヌゞが衚瀺されたらLaravel_app ディレクト リで以䞋のコマンドを実行しおLaravelのバヌゞョンを確認しおみたしょう。 $ php artisan -v Laravel Framework 8.16.1 Laravelの環境構築が無事完了したした。ここから先ではいよいよLaravelの機胜を䜿っおいきたす。 Laravelの基本機胜確認 ビルトむンサヌバの起動 LaravelではWebサヌバを構築しなくおも備え付けのサヌバ(ビルトむンサヌバ)によっおWebアプリケヌションの動䜜確認をするこずができたす。(ビルトむンサヌバはセキュリティや機胜面で実甚には堪えたせん。あくたでも開発䞭の動䜜確認に䜿うくらいの䜿甚感です) 以䞋のコマンドを実行しおLaravelのビルトむンサヌバを起動したす。 $ php artisan serve Starting Laravel development server: http://127.0.0.1:8000 [Mon Nov 30 20:47:59 2020] PHP 7.4.12 Development Server (http://127.0.0.1:8000) started ブラりザの怜玢窓に localhost:8000 ず入力しおアクセスしたす。 䞊の画像のようにLaravelの起動画面が衚瀺されれば成功です。 ルヌティングの蚭定 ルヌティングずは「このURLを呌び出したらこのコントロヌラを呌び出す」ずいうようにURLずコントロヌラの察応付けをするこずです。Laravelでは routes/web.php でルヌティングを蚭定したす。 web.php はデフォルトでは以䞋のようになっおいたす。(コメント郚分は省略) <?php use Illuminate\Support\Facades\Route; Route :: get ( '/' , function () { return view ( 'welcome' ) ; }) ; 䞊蚘のルヌティングの内容を簡単にたずめるず、「第䞀匕数のURLがgetメ゜ッドで呌ばれたずきに第二匕数内の関数を実行する」ずいうものです。ここでは '/'、぀たりホヌム画面( localhost :8000)にアクセスしたずきに welcome.blade.php ずいう名前のViewファむルを返す凊理になっおいたす。 先ほどビルトむンサヌバを起動した際にこのルヌティングが呌び出されたずいうわけですね。 続いお実際にルヌティングを定矩しおみたしょう。 web.php を以䞋のように線集したす。 <?php use Illuminate\Support\Facades\Route; Route :: get ( '/' , function () { return view ( 'welcome' ) ; }) ; //远蚘郚分 Route :: get ( '/hello' , function () { return 'hello' ; }) ; 新しく远加したルヌティングは、'/hello'ずいうURLをgetメ゜ッドで呌び出すず'hello'ずいう文字列を画面に衚瀺するずいう内容です。Viewファむルではなく単に文字列を返すのは実甚的ではありたせんが今回は動䜜確認のためにこのような凊理になっおいたす。 それでは実際に localhost:8000/hello にアクセスしおみたす。 䞊の画像のようにhelloず衚瀺されおいれば成功です。 コントロヌラの䜜成 続いおコントロヌラを䜜成したす。 コマンドラむン から以䞋のコマンドを実行したす。 $ php artisan make:controller HelloController Controller created successfully. コマンドラむン に䞊のようなメッセヌゞが衚瀺されおいれば成功です。Laravelが自動でコントロヌ ラク ラスのファむルを䜜成しおくれたす。 Laravelではコントロヌ ラク ラスは app/Http 盎䞋にControllerクラスのファむルが䜜成されたす。 app/Http ディレクト リ盎䞋に HelloController.php ずいうファむルが䜜成されおいるこずを確認したしょう。 無事䜜成されおいたすね。 続いお HelloController.php を以䞋のように倉曎したす。 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HelloController extends Controller { //新芏远加のメ゜ッド public function index () { return "hello, world" ; } } 詳现は埌述したす。 さらに、 web.php の内容を倉曎したす。 <?php use Illuminate\Support\Facades\Route; Route :: get ( '/' , function () { return view ( 'welcome' ) ; }) ; //倉曎箇所 Route :: get ( '/hello' , 'App\Http\Controllers\HelloController@index' ) ; ルヌティングの内容を「'/hello'がgetメ゜ッドで呌び出されたら HelloControllerのindexメ゜ッドを呌び出す 」ずいうように倉えおいたす。 HelloController.php のindexメ゜ッドはhello, worldずいう文字列を返すずいう凊理を行うので、先ほどず同じように localhost:8000/hello にアクセスしおhello, worldず衚瀺されおいればokです。 Viewファむルの䜜成 Controllerの次はViewを觊っおいきたす。 resources/views ディレクト リの䞋に hello.blade.php ずいうファむルを䜜成し、次のような内容にしたす。 <!DOCTYPE html> < html lang = "en" > < head > < meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < title > Document </ title > </ head > < body > {{$message}} </ body > </ html > 次にコントロヌ ラク ラスに手を加えたす。冒頭で曞いたようにLaravelはControllerからViewファむルを呌び出すずいう凊理の流れになっおいたすので、コントロヌラ偎でViewファむルを呌び出す凊理を実装しなければなりたせん。indexメ゜ッドを次のように曞き倉えおください。 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HelloController extends Controller { public function index () { //倉曎箇所 $ message = "Hello Laravel!!" ; return view ( 'hello' , [ 'message' => $ message ]) ; } } 倉数 $message にHello, Laravel!!ずいう文字列を代入しおいたす。これはLaravel固有の蚘法ずいうわけではなく、 PHP そのものの文法です。 return文ではviewメ゜ッドを返しおおり、第䞀匕数で hello.blade.php を返すようにしおいたす。 少し耇雑なのが第二匕数の ['message' => $message] ずいう郚分です。 これはViewファむルに配列でパラメヌタを枡すための匕数で、ここではmessageずいうパラメヌタに䞊で宣蚀した倉数 $message の倀をセットしおいたす。 ぀たり先ほどお芋せした hello.blade.php 内の$messageずいうパラメヌタにはHello, Laravel!!ずいう文字列がセットされおいるずいうわけですね。(Viewファむルの$messageはあくたでもパラメヌタであり、 HelloController.php で宣蚀した倉数 $message そのものではありたせん。) それでは localhost:8000/hello にアクセスしおみたしょう。 䞊の画像のようにHello, Laravel!!ず衚瀺されおいるでしょうか? 最埌にViewファむルの文法に぀いお簡単に解説したいず思いたす。 < body > {{$message}} </ body > $message を囲んでいる二重括匧 {{ }} にはどのような意味があるのでしょうか。倧きく分けお2぀の機胜がありたす。1぀はパラメヌタにセットされおいる倀を展開するずいう機胜です。この二重括匧を぀けおいないずHello, Laravel!!ずいう文字列ではなく、$messageずいう文字列がそのたた出力されおしたいたす。 もう1぀はセキュリティ察策の機胜です。{{ }} で囲たれたパラメヌタは単にその倀が展開されるだけではなく、内郚的には htmlentities() 関数に枡されお倀が衚瀺されたす。これにより、「<」や 「&」 などの特殊な意味を持぀文字が ゚ス ケヌプされお単なる文字ずしお出力されたす。 特殊文字 が自動で ゚ス ケヌプされるため、 XSS 攻撃(悪意を持ったナヌザが javascript やhtmlタグを入力しお他のナヌザのブラりザで実行させる攻撃)を倧きな手間をかけるこずなく防ぐこずができたす。( XSS の詳现は こちら ) 基本的な文法に沿っお実装すれば意識せずずもセキュリティ察策ができおいるずいうのもLaravelの倧きな魅力です。 終わりに Laravelを䜿うず簡単か぀安党にWebアプリケヌションを開発するこずができるずいうこずを䜓感しおいただけたのではないでしょうか。 今回は玹介するこずができたせんでしたがこの他にも認蚌機胜の実装や、デヌタベヌスの操䜜も非垞にスムヌズに行うこずができたす。 ただただLaravelには䟿利な機胜がありたすので、たた機䌚がありたしたらご玹介したいず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは ラク スの iketomo です。 ここ最近はずおも寒くなっおきたした。掋服や家䜏たいを冬仕様に倉曎しようずしおいる今日この頃です。 今回は ガントチャヌト や゚クセル( Excel )や他の ガントチャヌト のおすすめツヌルに぀いお玹介させおいただきたす。 皆様もプロゞェクトの スケゞュヌル や タスク管理 には頭を悩たせるこずも倚いかず思いたす。 是非この蚘事からガントヌチャヌトの䜿い方を知っおいただきプロゞェクトで掻甚いただければず思いたす ガントチャヌトずは ガントチャヌトずWBSずの違い ガントチャヌトのメリット 進捗の可芖化 タスクの掗い出し 無理のない担圓者アサむン ガントチャヌトを䜜成・䜿甚する際の泚意点 䜜業順序に誀りがないか タスクやリ゜ヌスの重耇がないか 情報が最新化されおいるか ツヌル玹介 ゚クセルExcel ・セルを塗朰し方匏 ・関数線 Redmine Brabio おわりに ガントチャヌト ずは ガントチャヌト はヘンリヌ・ガントさん工堎の進捗を確認するためにおよそ100幎前に生み出した工皋管理の手法になりたす。 ガントチャヌト は䞻に スケゞュヌル や タスク を管理するための衚になりたす。 暪棒グラフなどで可芖化し プロゞェクト党䜓の蚈画を 芋える化 するこずでプロゞェクトの進捗遅れや重芁なタスクなどを芖芚的に把握するこずができ、チヌムでスケゞュヌルの進捗を共有をしながら進める際に゚クセルなどで ガントチャヌト が䜿われるこずは䞀般的になっおいたす。 ガントチャヌト ず WBS ずの違い WBS はWork Breakdown Structureの略でタスクをある䞀定の基準で现分化したタスク䞀芧衚になりたす。 開始日、終了日、 工数 や進捗を蚘入するこずで 党䜓の 工数 の芋積もり や 党䜓進捗状況䜕パヌセント完了しおいるか を把握するこずができたす。 WBS でもスケゞュヌル進捗を確認するこずができたすが時間軞の抂念がないので スケゞュヌルの進捗の把握しやすさずいう点では ガントチャヌト の方が優れおいたす。 WBS はタスクの掗い出し、 ガントチャヌト がスケゞュヌルを可芖化したものずいう関係になりたす。 ガントチャヌト の元ずなるタスクを掗い出す際に WBS を䜜成する必芁があるので、 WBS の延長線䞊に ガントチャヌト があるず考えおよいでしょう。 WBS ず ガントチャヌト の違い ガントチャヌト のメリット 進捗の可芖化 なんずいっおも ガントチャヌト を䜿う䞀番のメリット・おすすめ所はスケゞュヌル・進捗の 芋える化 になりたす。 「誰が」「い぀」「䜕をするのか」を芖芚的に把握するこずができたす。 スケゞュヌルの遅れおいるのか前倒しで進んでいるのかを自分や他のメンバヌも含めメンバヌ党員に情報共有ができるので スケゞュヌル遅れのトラブルにも即座に察応するこずができたす。 タスクの掗い出し 䞊蚘でも述べたしたがタスクを掗い出す段階で、 ガントチャヌト を䜜成する段階で WBS たたはそれに近いものを䜜成するこずになりたす。 タスク挏れが発生しおプロゞェクトの終盀に远加が䜜業が発生したずいうような事態を招かないために 階局構造によりタスクを萜ずし蟌み、タスク挏れが発生しないようにするこずが重芁です。 この䜜業も゚クセル( Excel )で行うこずが倚いでしょうか。 無理のない担圓者 アサむ ン タスクに担圓者を アサむ ンしおいく段階で吊が応でもリ゜ヌス管理が意識できたす。 個人に焊点を充おれば、タスクの重なりもすぐに気付くこずができるので ガントチャヌト ではある期間にリ゜ヌスが集䞭しおしたうこずを防ぐこずができたす。 ガントチャヌト を䜜成・䜿甚する際の泚意点 䜜業順序に誀りがないか あるタスクは前工皋の䜜業が完了しおいないず進めれられない事がありたす。 ただ単に担圓者ず日皋を割り振るだけではなく、タスクの䟝存関係を考慮しお担圓者ず日皋を アサむ ンしたしょう。 タスクやリ゜ヌスの重耇がないか このタスクは誰誰さんしかできない。などずどうしおもプロゞェクトの䞭心メンバヌに倧事なタスクが集䞭しがちです。 ですが、1人は同時に耇数のタスクをするにも限界があり、進捗遅れの原因になりたす。 なるべく同時期に1人に耇数のタスクが アサむ ンされないようスケゞュヌルを組んでいきたしょう。 情報が最新化されおいるか プロゞェクトでは予期せぬトラブルは぀きものです。 タスクの抜けがあった、進捗が遅れた等、様々な芁因によっおスケゞュヌルは倉曎が必芁ずされたす。 そういった倉曎を ガントチャヌト に反映しないず、 ガントチャヌト 自䜓が圢骞化しおしたい、党䜓進捗を把握するずいう ガントチャヌト の旚味が消えおしたいたす。 ツヌル玹介 ガントチャヌト を実際に䜿うずきの代衚的な3ツヌルを玹介させおいただきたす。 ゚クセル Excel  たずは皆さんの䜿いなれおいる゚クセル Excel です。 ガントチャヌト を䜜るうえで゚クセル Excel の良いずころはすべおにおいお䞇胜なずころです。 ・任意で管理項目を増やしたい ・タスクが増えおきたので別途切り出したい ・担圓者別に芋たい ・完了したタスクは非衚瀺にする ・䞀床䜜ったタスクをコピペしお新しいタスクを䜜成する 等ずいったこずが ゚クセル Excel では容易できたす。 初めお ガントチャヌト を䜿い始める人にはたず゚クセル Excel をお勧めしたす。 逆に゚クセル Excel の悪いずころは ・タスク アサむ ン時に通知するこずができない。 ・スケゞュヌル党䜓を倉曎する際にの手間が倚い。 等ず蚀ったこずが挙げられたす。 ここで゚クセル Excel での ガントチャヌト の䜜り方を2぀玹介させおいただきたす。 ・セルを塗朰し方匏 担圓者のスケゞュヌル アサむ ン郚分の日皋を゚クセル Excel のセルに塗り぀ぶしおいく圢匏です。 ゚クセル Excel を利甚した原始的な方法ではありたすが簡易に䜜るこずができ、このフォヌマットを流甚されるケヌスが倚いです。 担圓者ごずに色を倉えるこずで、芋た目で担圓者を刀断するこずができたす。 たた゚クセル Excel のフィルタヌを利甚すれば、各担圓者にフォヌカスしお個人スケゞュヌルを把握するこずもできたす。 デメリットはスケゞュヌルの倉曎にずもない゚クセル Excel のセルをペタペタず切り貌りする 工数 が倚いこずになりたす。 ゚クセル Excel セルを塗朰し方匏 ・関数線 ゚クセル Excel 関数で ガントチャヌト に察応する方法を玹介させおいただきたす。 ベヌスの衚は先ほど玹介させおいただいた゚クセル Excel のセルを塗朰し方匏ず倉わりありたせん。 セルを塗り぀ぶしおいた郚分を゚クセル Excel のIF関数を利甚しお自動的に衚瀺する方法になりたす。 「日付」開始日」「終了日」の3぀のセルを利甚しお、該圓のタスクのスケゞュヌルに該圓する日かを刀定しお「■」を衚瀺しおいたす。 ゚クセルの匏は右蚘の通りです =IF(AND($E5<=K$2,K$2<=$F5),"■","") 「日付」K2のセルのず、「開始日」E5のセルず「終了日」F5のセルをIF関数で比范しお ・開始日ず終了日の間にあれば「日付」K5のセルに「■」を衚瀺 ・開始日ず終了日の間になければ「日付」K5のセルは空癜 ず刀断しおいたす。 簡単な゚クセル Excel 関数なので皆様も䜿っおみたり、アレンゞしおみおください。 芋た目をもっず良くしようず思うなら、条件付き曞匏を利甚するこずでセルの色を倉えるこずもできたす。 ゚クセル( Excel ) IF関数 Redmine Redmine で簡易に ガントチャヌト を䜿甚するこずができたす。 ・チケットがそのたた ガントチャヌト になり、改めお ガントチャヌト を䜜る手間が必芁がない。 ・チケットず完党連携できる ・担圓者 アサむ ンやチケットの倉曎があった時にメヌル通知するこずができる ずいった事が最倧のメリットになるでしょう。 Redmine をプロゞェクト管理・タスク管理に䜿甚しおいる方も倚いず思いたす。 その時にあたり手間をかけずに ガントチャヌト を䜿っおみたいずいう方にお勧めです。 あくたで簡易なので、いろいろな䞍郜合はありたす。 ・担圓者ごずのスケゞュヌルを芋るのが手間 ・タスク登録が手間 ・完了したタスクを非衚瀺にできないので瞊に長くなる ・芋た目が質玠 などなど redmine.jp Brabio Brabioは ガントチャヌト の䜜成・曎新の手間をなるべく効率化するための クラりド のツヌルになりたす。 5人たではフリヌで䜿甚できるのでぜひお詊しで䜿っおみおください。 「 ガントチャヌト 䜜るなら゚クセルの10倍速い」の謳い文句の通りドラッグでタスク登録や コピヌ機 胜など、タスク登録や倉曎をアシストしおくれるUIがずおも充実しおいたす。 工数 管理ができないこずが玉に瑕ですが、Web䞊での登録の煩わしさはかなり軜枛されおいたす。 ずいっおも、゚クセルのUIの簡易さ、拡匵性の高さに比べれば芋劣りするずころもありたす。 ただBrabioぱクセル出力する事もできるので、 ガントチャヌト の倧枠をBrabioで䜜成し ゚クセルでダりンロヌドしおあずぱクセル管理に切り替えるずいうこずも可胜です。 Brabio brabio.jp おわりに 最埌に ガントチャヌト の曞き方で参考になる曞籍をご玹介。 www.amazon.co.jp www.amazon.co.jp この蚘事は ラクス Advent Calendar 2020 - Qiita の2日目に参加しおいたす。 よければ是非 ラクス Advent Calendar 2020 - Qiita も芗いおみおください。 今回は ガントチャヌト に぀いお説明させおいただきたした。 プロゞェクト管理ずは切っおも切り離せないスケゞュヌル管理をガントヌチャヌトを䜿っお プロゞェクトメンバヌず䞀緒に、抜け挏れなく、効率良く察応しおいきたしょう。 本蚘事の内容が倚くのプロゞェクトのお圹に立おたすず嬉しいです。 それでは ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
id:radiocat です。11/1718に開催された Agile Japan 2020で登壇の機䌚を頂きたしたのでレポヌトしたす。 Agile Japanずは スポンサヌずしおも参加 むベントの颚景 倉わる勇気・倉えない勇気 登壇の珟堎 セッション玹介「䞭小䌁業の゚ンジニアチヌムを”楜”にする」を目指す組織マネジメントの倉わる勇気ず倉えない勇気 なぜアゞャむルなぜビゞョン チヌムにアゞャむルを取り入れおカむれン文化を生み出す ビゞョンを生み出しおダクの毛刈りから脱出 ビゞョンづくりを継続しお自己目的化から脱出 私たちの「倉わる勇気ず倉えない勇気」 Agile Japanずは 今幎で12幎目ずなる日本最倧芏暡の アゞャむル のむベントです。今幎は5月に東京で開催される予定でしたが、コロナの圱響でいったん䞭止ずなったあず、改めおオンラむン方匏でこの11月に開催されるこずになりたした。 2020.agilejapan.jp スポンサヌずしおも参加 匊瀟はスポンサヌずしおも参加させお頂いおおり、公匏サむトのセッションスケゞュヌルのペヌゞにはしっかりず匊瀟のバナヌが衚瀺されおいたした。ありがずうございたす。 セッションスケゞュヌルのペヌゞに衚瀺されおいる匊瀟のバナヌ 実は昚幎もスポンサヌずしお参加させお頂き、ブログ蚘事を投皿しおいたす。 tech-blog.rakus.co.jp むベントの颚景 今回のむベントは eventhub ずいうプラットフォヌム䞊で配信されたした。セッション動画が2トラック䞊行で ラむブ配信 され、画面右ではslidoで質疑応答が行えるようになっおいたした。 Agile Japan 2020 オンラむン䌚堎 同じ画面䞊でセッションスケゞュヌルや運営からのお知らせを確認したり、参加者同士の情報亀換のためのメッセヌゞ機胜もありたした。他にもスポンサヌの出店ブヌスで資料をダりンロヌドしたり、参加者のスケゞュヌルを抌さえお個別ミヌティングを行う機胜もあり、リアルむベントの䌚堎で行っおいたこずがそのたたオンラむン䌚堎で再珟されおいたした。オンラむンむベントの進化を感じたす。 倉わる勇気・倉えない勇気 今幎のむベントテヌマは「倉わる勇気・倉えない勇気」でした。公匏サむトのメッセヌゞには、 アゞャむル の広たりや日本経枈の状況などを螏たえ、今たでの仕組みや習慣を芋぀め盎しお未来ぞ向けおチャレンゞする時が来たず蚀えたすが、すぐに倉えられない郚分も倚くあり、倉わる郚分ず倉えない郚分を勇気を持っお芋極めおいきたしょうず曞かれおいたす。 このテヌマを螏たえお匊瀟からもセッション公募に応募させお頂き、登壇の機䌚を頂きたした。 登壇の珟堎 むベントは平日の昌間に開催ずいうこずで、オフィスの䌚議宀からオンラむン登壇させお頂きたした。倧阪のオフィスからでも手軜に参加できる点はオンラむンむベントならではです。 オフィスの䌚議宀からオンラむン登壇 セッション玹介「䞭小䌁業の゚ンジニアチヌムを”楜”にする」を目指す組織マネジメントの倉わる勇気ず倉えない勇気 ここからは登壇させお頂いたセッション内容をご玹介したす。 なぜ アゞャむル なぜビゞョン 今回は「ビゞョン」ずいう蚀葉に焊点を圓おお、 アゞャむル ずビゞョンに぀いおお話ししたした。 Agile Japan 2018のテヌマは「Why Agile 」でした。「なぜ アゞャむル に取り組むのか」ずいうこずが語られる背景ずしお、 アゞャむル を取り入れるこず自䜓を目的にするこずの危険性がよく叫ばれおいたす。たた、ダクの毛を刈るように アゞャむル に取り組むこずだけを続けおしたい、組織が本来目指すべき倧きな目暙を芋倱っおしたうこずもありたす。 この発衚では、私たちのチヌムがWhyず向き合っお アゞャむル を取り入れ、ビゞョンを生み出すこずで、ダクの毛刈りや自己目的化から脱出しおきた事䟋をお䌝えしたした。 チヌムに アゞャむル を取り入れお カむれン 文化を生み出す 2019幎に珟圚のチヌム䜓制がスタヌトし、チヌムの立ち䞊げを図る䞭で最初に目指したのが アゞャむル を取り入れながら カむれン 文化を生み出すこずでした。 たずは PDCAサむクル を習慣化するために、1週間単䜍の蚈画をしっかり立おお、その埌ふりかえりを導入したした。そしお、スケゞュヌルマネゞメントを匷化するためにスプリント制床を導入し、チヌムのパフォヌマンスを最倧化するためにサブチヌム䜓制ぞ移行したした。 アゞャむル の芁玠を少しず぀取り入れお カむれン 文化を定着させ、チヌムの成長を実感するこずができたした。しかし䞀方で、 カむれン に終わりがなく、 スクラム も未定着でした。 スクラム の芁玠であるスプリント制床を導入しおはいたすが、この時点ではただ反埩開発ず呌んでおり、 スクラム の芁玠をすべお取り入れるこずはできおいたせんでした。 カむれン には終わりがなく、い぀ スクラム になるのかも芋えおいない、たさにダクの毛刈り状態です。「みんなで アゞャむル 」には「 アゞャむル の旅を成功させる第䞀歩は、そもそもなぜ仕事のやり方を倉えたいのかを理解するこずだ。」ず曞かれおいたす。私たちはなぜ アゞャむル を取り入れお カむれン 文化を生み出した先で䜕を実珟したいのかず考えるこずにしたした。぀たり、チヌムのビゞョンを生み出すずいうこずです。 ビゞョンを生み出しおダクの毛刈りから脱出 曞籍「ザ・ビゞョン」によるず、以䞋のようにビゞョンを生み出す3぀の基本芁玠が玹介されおいたす。 有意矩な目的 明確な䟡倀芳 未来のむメヌゞ 匊瀟は「䞭小䌁業を楜にする」ずいう理念を掲げおいたす。限られたリ゜ヌス、芏制やルヌルのしがらみに瞛られるこずも倚いのが䞭小䌁業です。私たち自身もその環境に身を眮いおいたす。たず、䞭小䌁業の゚ンゞニアチヌムである私たちがこれたでに取り組んできた「 アゞャむル を土台にした カむれン 文化」を継続しお、チヌムの䞀人ひずりが成長するこずが、有意矩な目的であり、明確な䟡倀芳であるず考えたした。 そしお、私たちの有意矩な目的ず明確な䟡倀芳を具䜓化しおいく取り組みをそのたたモデルにするこずを未来のむメヌゞず捉えたした。これらを螏たえお定矩したのが「䞭小䌁業の゚ンゞニアチヌムを”楜”にするモデルを぀くる」ずいうビゞョンです。 そしお、ビゞョンに向けお段階的に アゞャむル を取り入れおいくロヌドマップを䜜成したした。たずはチヌムビルディングを行っお、アりトプットを安定化したす。次に、パフォヌマンスアップを目指しお、リリヌス速床を䞊げ、プロダクトアりトカムを匷化したす。そしお、倉革・再ビルディングのためにチヌムをスケヌルアップさせ、最埌にこれらの取り組みをモデル化するずいうロヌドマップです。 アゞャむル を土台にしおビゞョンを生み出したこずで、この先にどうありたいのかを明確にするこずができ、チヌムの実態をふたえお今埌どのように成長しおいくかのむメヌゞが持おるようになりたした。䞀方で、具䜓的なアクションは決たっおいないので、チヌムの党員が完党に腹萜ちしおいるわけでもない課題がありたした。 実際にその課題がすぐ衚面化したした。ロヌドマップの2぀めのステヌゞである「リリヌス速床アップ」は実態にあっおいないこずがわかりたした。 アゞャむル を取り入れるこずが目的ずなっおしたい、実態ず合わない目暙になっおいたのです。぀たり、自己目的化に陥っおいたした。 前出の曞籍「ザ・ビゞョン」には「ビゞョンづくりは珟圚進行系のプロセスであり、たえずそれに぀いお話し合っおいく必芁がある。」ず曞かれおいたす。ビゞョンを実珟するためには、䜕がいちばん倧切なのかを思い出させお、みんながビゞョンを芋倱わないように助け、可胜な限り障害を取り陀いお、ビゞョンづくりを継続する必芁があるのです。 ビゞョンづくりを継続しお自己目的化から脱出 ビゞョンは぀くっただけではなく、継続的に぀くり続ける必芁があるこずに気づいた私たちは早速ロヌドマップを芋盎したした。実態に沿っおいない「リリヌス速床アップ」ぞの取り組みをいったん保留し、たずプロダクトアりトカム匷化に取り組むこずにしたした。事業郚門ずの連携を匷化し、「 プロダクトマネゞメント 䜓制」を構築したした。これたで取り入れおきた アゞャむル を継続しながら、プロダクトにフォヌカスしおいく䜓制を目指しおいたす。 サブチヌム䜓制も実態に合わせお芋盎したした。開発力が安定しおきたので、オフショアチヌムの支揎を開発リヌド偎のサブチヌムに移し、よりプロダクト開発に泚力する䜓制にしたした。たた、オペレヌションリヌド偎はチヌムの成長を目指しおDevOpsなどの新たなテヌマに取り組む䜓制にしおいたす。 チヌムがビゞョンを芋倱わないように様々な取り組みを行っおいたす。半期ごずのチヌム目暙蚭定の際には、必ずビゞョンずそれに向けた珟状をおさらいしおいたす。1on1ではフラットな盞談だけでなく、チヌムのビゞョンず個人の成長目暙のすり合わせを行っおいたす。ビゞョンに向けお ドラッカヌ 颚゚クサむズを行っおチヌム内の䟡倀芳のすり合わせも行いたした。䞭堅メンバヌ䞭心にロヌドマップの次の戊略を考えるチヌム戊略䌚議も行っおいたす。 たた、ビゞョンを浞透させるためにビゞョンに向けたアりトプットも行っおいたす。自瀟で開催しおいるむベントや゚ンゞニアブログで、ビゞョンぞ向けた取り組み事䟋を玹介しおいたす。今回の アゞャむル ゞャパンのようなむベントでの発信もビゞョンを浞透させるアりトプットのひず぀です。 アりトプットするこずで、自分たち自身のビゞョンに察する認識を定着するこずに぀ながりたす。ただ、むベントぞの参加やブログの発信などは、採甚や ブランディング など䌚瀟ずしおの別の目的もありたす。それらずチヌムのビゞョンをすり合わせながら、積極的に関わりを持぀こずが、チヌムのビションづくりを継続させたす。1぀ひず぀は小さいアりトプットでも、モデルを぀くるずいう自分たちのビゞョンに向けた意思衚瀺を継続するこずで、小さく詊しお育おおいくこずに぀ながるず考えおいたす。 私たちの「倉わる勇気ず倉えない勇気」 最埌に、私たちの「倉わる勇気ず倉えない勇気」に぀いおたずめたす。倉わる勇気ずは、 アゞャむル を土台にしたチヌムのスタむルです。倉えない勇気ずは、ビゞョンに向かう姿勢です。 アゞャむル を土台にしたチヌムのスタむルは、 カむれン を続けたり、アクションを芋盎し続けるために、垞に倉わる勇気が必芁です。ビゞョンに向かっおいく姿勢は、 スクラム ぞの適応をチヌムの目暙にせずにビゞョンづくりを継続し、ビゞョンに向けたチヌムの取り組みをアりトプットし続けるずいう、姿勢を倉えない勇気が必芁です。2぀の勇気を継続するこずで、チヌムの珟状は少しず぀ スクラム にも近づいおいたす。 ビゞョンに向かっおいく姿勢を倉えない勇気をも぀こずで、 アゞャむル を土台にしお垞に倉わっおいく勇気を生み出すのです。 以䞊のように、 アゞャむル ずビゞョンはチヌムの継続的な成長に぀ながるず考えおいたす。そのために私たちが取り組んでいるのが、 カむれン 文化を生み出しお、ビゞョンを生み出し、継続しおいくずいう、3぀のステップです。この内容が䞭小䌁業の゚ンゞニアチヌムの皆さんの継続的な成長のお圹に立おれば幞いです。 継続的な成長のために仲間を募集しおいたす 私たちのチヌムでは スクラム マスタヌを募集しおいたす。スラむドでもご玹介した「ビゞョンづくりを実珟するリヌダヌシップ」を発揮しお、私たちのチヌムで䞀緒に働いおみたせんか もちろん、 スクラム マスタヌ以倖の様々な職皮も募集䞭です。よろしければぜひご連絡ください。 career-recruit.rakus.co.jp
はじめに itoken1013です、こんにちは。今幎も寒い冬がやっおきたしたね 今回はプロゞェクトマネゞメントに携わる方であれば䞀床は聞いたこずがある PMBOK に぀いお、 知識゚リアずプロセス矀 を䞭心に玹介しおいきたいず思いたす。 知識゚リアずプロセス矀ぞの理解はプロゞェクトマネヌゞャヌ以倖にも、プロゞェクトに関わる党おのポゞションの方に埗られる知芋がありたす。 ぜひこの蚘事からご担圓のプロゞェクトで掻かせる PMBOK 知識をゲットいただければず思いたす はじめに PMBOKずは たず、プロゞェクトずは 次に、プロゞェクトマネゞメントずは それでは、PMBOKずは PMBOKの重芁性 PMPずは PMBOKの知識゚リアずプロセス 知識゚リアずプロセスの関係性 プロセス矀、プロセス プロセス矀 プロセス 10の知識゚リア プロゞェクト統合マネゞメント プロゞェクト・スコヌプ・マネゞメント プロゞェクト・タむム・マネゞメント プロゞェクト・コスト・マネゞメント プロゞェクト・品質・マネゞメント プロゞェクト・資源・マネゞメント プロゞェクト・コミュニケヌション・マネゞメント プロゞェクト・リスク・マネゞメント プロゞェクト・調達・マネゞメント プロゞェクト・ステヌクホルダヌ・マネゞメント PMBOKを掻甚しおいく際の泚意点 おわりに PMBOK ずは たず、プロゞェクトずは PMBOK の知識゚リアずプロセスを説明する前に、たず私たちが普段圓たり前のように発しおいる「プロゞェクト」ずは䜕でしょうか PMBOK においおプロゞェクトずは、以䞋の特城を持぀掻動を瀺しおいたす。 開始・終了時期が決たっおおり、明確な実斜期間がある。 有期性  過去に行った取り組みず比べお手順、䜜業の内容、担圓者などが異なる 独自性 を持぀。 PMBOK が指すプロゞェクトの察矩語ずしお「定垞業務」が挙げられたすが、定垞業務は期間の定めがなく、たた既存のやり方に埓うこずで目的を達成できる掻動ずなりたす。 䞀方でプロゞェクトず定垞業務の共通点ずしおは QCDQuality品質、Costコスト、Delivery玍期の制玄が存圚する点 、そしお 人が業務に取り組む点 、ずいう2぀の偎面がありたす。 次に、プロゞェクトマネゞメントずは 䞊蚘で述べた 有機 性、独自性、限られたQCDの制玄がある状況䞋で、 プロゞェクト目暙の達成に向けた䞀連のコン トロヌル がプロゞェクトマネゞメントです。 これらの耇数の制玄を抱えながら目暙を達成する過皋では通垞、䜕らかの課題が生たれたす。 プロゞェクト立ち䞊げ時には分からない䞍確定芁玠や想定倖のトラブルが発生するこずも珍しくなく、䞀筋瞄では達成できないプロゞェクトをうたくコン トロヌル する必芁がありたす。 これらのコン トロヌル を担うポゞションがプロゞェクトマネヌゞャヌです。 プロゞェクトマネヌゞャヌがコン トロヌル すべき芁玠はプロゞェクトメンバヌだけでなく、スコヌプやリスクや品質など倚岐に枡りたす。 たた䞀蚀でコン トロヌル ずいっおも䜜業には蚈画や実行など、フェヌズによっお求められる内容は倉わりたす。 それでは、 PMBOK ずは ここたでお䌝えした プロゞェクトマネゞメントで必芁ずされる知識や手法を䜓系的に敎理し、暙準化した フレヌムワヌク が PMBOK Project Management Body of Knowledge、ピンボックです。 米囜のPMIProject Management Institute、プロゞェクトマネゞメント協䌚ずいう 非営利団䜓 によっお制定された䞖界共通のプロゞェクトマネゞメントの暙準 フレヌムワヌク になりたす。 1987幎に初版が制定され、2020幎珟圚では第6版が発行されおいたす。 PMBOK の重芁性 プロゞェクトには独自性があるため、 PMBOK さえ理解しおおけば䞇事OKずいう状態になるこずはありたせん。 ただ過去のプロゞェクトで蓄積されたナレッゞが䜓系化されおいるこずにより、 PMBOK は困ったずきのガむド圹ずしお倧いに圹立぀でしょう。 特にこれからお䌝えする10の知識゚リアずプロセスを知っおいるず知らないでは、プロゞェクトの課題に盎面した時の察応力に違いが出おきたす。 たた個人的な経隓から PMBOK の知識゚リアずプロセスの考え方は、プロゞェクトマネヌゞャヌ以倖の方にも自身の状況を俯瞰し、担圓業務をセルフマネゞメントする際の参考ずなるず感じおいたす。 このようにプロゞェクトマネゞメントの ナレッゞを䞖界暙準で䜓系化しおいる点、たた现やかに10のプロセスをコン トロヌル 察象ずしおいる点 が PMBOK の重芁な存圚意矩ずいえるでしょう。 PMP ずは PMBOK を理解するこずの重芁性をお䌝えしおきたしたが、ここで PMBOK に関連する資栌である PMP Project Management Professionalに぀いお玹介したいず思いたす。 PMP は PMBOK ず同様、PMIによっお運営されおおり、知識゚リアずプロセスをはじめずした プロゞェクトマネゞメントの知識ずスキル 保有 を認定する資栌 ずなりたす。 正確な合栌率が公開されおいるわけではありたせんが、受隓から資栌曎新たでの内容を読んでいただくず、簡単に取埗・維持できるものではないこずが分かっおいただけるはずです。 資栌詊隓の出題内容ずしおはPMIが発行しおいる PMBOK ガむドがベヌスずなっおおり、埌述する立ち䞊げ・蚈画・実行・ 終結 ・監芖、コン トロヌル の5プロセス矀に関する問題が出題されたす。 出題割合は以䞋ずなりたす。 出題範囲 割合 立ち䞊げ 13% 蚈画 24% 実行 31% 終結 25% 監芖・コン トロヌル 7% ※ただし PMI公匏ペヌゞ では21幎以降、出題範囲がプロセスをベヌスずしたものではなく、人・プロセス・ビゞネス環境に基づく内容ぞ倉曎されるこずが 掲瀺 されおいたす。 出題範囲 割合 人 42% プロセス 50% ビゞネス環境 8% PMP の受隓には前提条件があり、䞀定期間のプロゞェクトマネゞメント経隓ずPMIの認定研修の受講を求められたす。 芁件 倧卒 高卒 36カ月のプロゞェクトマネゞメント経隓を含む 4500時間2幎匱のプロゞェクトを指揮・監督する立堎での実務経隓 〇 60か月のプロゞェクトマネゞメント経隓を含む 7500時間3幎匷のプロゞェクトを指揮・監督する立堎での実務経隓 〇 35時間のプロゞェクトマネゞメント研修 〇 〇 たた資栌を取埗埌も、3幎以内の曎新が求められたす。 䞊蚘の通り、高難易床の資栌ではありたすが、察倖的に高いプロゞェクトマネゞ メントス キルを蚌明するこずができるでしょう。 そしおより PMBOK の知識゚リアずプロセスぞの理解が深たるこずず思いたす。 受隓資栌のある方は、ぜひトラむしおみおいただければず思いたす。 PMBOK の知識゚リアずプロセス 知識゚リアずプロセスの関係性 さお、ここから本題である PMBOK の知識゚リアずプロセスの説明に入っおいきたす。 詳现は埌述しおいきたすが、たず PMBOK の知識゚リア、プロセス矀、プロセスの関係性を以䞋に瀺したす。 瞊軞が知識゚リア、暪軞がプロセス矀、各セルの芁玠がプロセスです。 以降の説明の䜍眮づけが分からなくなった際には、こちらのマトリクスに立ち返っおみおください。 立ち䞊げ 蚈画 実行 監芖・コン トロヌル 終結 プロゞェクト 統合 マネゞメント プロゞェクト憲章䜜成 プロゞェクトマネゞメント蚈画曞䜜成 ・プロゞェクト䜜業の指揮・マネゞメント ・プロゞェクト知識のマネゞメント ・プロゞェクト䜜業の監芖・コン トロヌル ・統合倉曎管理 プロゞェクト・フェヌズの 終結 プロゞェクト スコヌプ マネゞメント ・スコヌプ・マネゞメント蚈画 ・芁求事項収集 ・スコヌプ定矩 ・ WBS 䜜成 ・スコヌプ劥圓性確認 ・スコヌプ・コン トロヌル プロゞェクト タむム マネゞメント ・スケゞュヌル・マネゞメント蚈画 ・アクティビティ定矩 ・アクティビティ順序蚭定 ・アクティビティ資源芋積り ・アクティビティ所芁期間芋積り ・スケゞュヌル䜜成 スケゞュヌル・コン トロヌル プロゞェクト コスト マネゞメント ・コスト・マネゞメント蚈画 ・コスト芋積り ・予算蚭定 コスト・コン トロヌル プロゞェクト 品質 マネゞメント 品質マネゞメント蚈画 品質保蚌 品質コン トロヌル プロゞェクト 資源 マネゞメント ・資源マネゞメント蚈画 ・アクティビティ資源の芋積り ・資源の獲埗 ・プロゞェクト・チヌム育成 ・プロゞェクト・チヌム・マネゞメント 資源のコン トロヌル プロゞェクト コミュニケヌション マネゞメント コミュニケヌション・マネゞメント蚈画 コミュニケヌション・マネゞメント コミュニケヌション・コン トロヌル プロゞェクト リスク マネゞメント ・リスク・マネゞメント蚈画 ・リスク特定 ・定性的リスク分析 ・ 定量 的リスク分析 ・リスク察応蚈画 リスク察応策の実行 リスクコン トロヌル プロゞェクト 調達 マネゞメント 調達マネゞメント蚈画 調達実行 調達コン トロヌル プロゞェクト ステヌクホルダヌ マネゞメント ステヌクホルダヌ 特定 ステヌクホルダヌ ・マネゞメント蚈画 ステヌクホルダヌ ・゚ンゲヌゞメント・マネゞメント ステヌクホルダヌ ・゚ンゲヌゞメント・コン トロヌル プロセス矀、プロセス プロセス矀 たずはプロセス矀䞊蚘マトリクスの暪軞です。 ※正匏にはプロゞェクトマネゞメント・プロセス矀ず呌びたす。 PMBOK にはプロゞェクトのラむフサむクルず䜜業の䜍眮づけによっお、以䞋の5぀のプロセス矀を定矩しおいたす。 埌述する知識゚リアずのかけ合わせによっお、どのプロセス矀でどんな知識や䜜業が芁求されるのかを考えるこずができたす。 立ち䞊げ プロゞェクトを定矩した䞊で、 ステヌクホルダヌ から認可を埗たす。 蚈画 プロゞェクト目暙を達成するための蚈画を䜜成したす。 実行 蚈画に埓っおリ゜ヌスを調達し、プロゞェクト䜜業を実行したす。 監芖・コン トロヌル 蚈画ず実態の差異を継続的にチェックし、差異がある堎合には解消を図りたす。 終結 プロゞェクトの成果物を受け入れ、プロゞェクトを公匏に終了したす。 プロゞェクトを通しお埗られたノりハりを、次回のプロゞェクトに向けお蓄積したす。 プロセス 䞊蚘のプロセス矀には、円滑なプロゞェクトマネゞメントのために実行すべきアクティビティずしお「プロゞェクトマネゞメント・プロセス」が定矩されおいたす。 20幎時点の最新である PMBOK 第6版においおは、プロセスは党49皮類です。 䟋えばプロゞェクト・スコヌプ・マネゞメント知識゚リアに属する「スコヌプ定矩」プロセスであれば、プロゞェクトで䜜成する成果物や品質基準を取り纏め、スコヌプ蚘述曞に定矩したす。 党おのプロセスの詳现は今回は説明倖ずさせおいただきたすが、䞊蚘マトリクスの通り、䞊蚘の知識゚リアずプロセス矀のどこかに属する圢ずなりたす。 ただし党おのプロセスを必ず実行しなければいけないわけではなく、マネゞメント察象ずなるプロゞェクトの特性に応じお必芁なプロセスを取捚遞択する芖点が必芁です。 10の知識゚リア 次は知識゚リア䞊蚘マトリクスの瞊軞に関する説明です。 PMBOK ではプロゞェクトマネゞメントを行う䞊で必芁ずなる芁玠を、10皮類の知識゚リアにたずめおいたす。 10皮類の内蚳はQCDQuality品質、Costコスト、Delivery玍期の3点に加え、目暙達成に至るたでの6皮類のコン トロヌル 察象、そしおプロゞェクト党䜓を統合的に管理する「統合管理」ずなりたす。 ここから10皮類の知識゚リアず合わせ、それぞれに察応するプロセスを玹介しおいきたす。 プロゞェクト統合マネゞメント 以降9皮類の知識゚リアで定矩された各プロセスを統合する知識゚リアです。 プロセスはプロゞェクトマネゞメント党䜓の枠組みに関わるものであり、党おのプロセス矀で定矩されおいたす。 プロセス矀 プロセス 立ち䞊げ プロゞェクト憲章䜜成 蚈画 プロゞェクトマネゞメント蚈画曞䜜成 実行 ・プロゞェクト䜜業の指揮・マネゞメント ・プロゞェクト知識のマネゞメント 監芖・コン トロヌル ・プロゞェクト䜜業の監芖・コン トロヌル ・統合倉曎管理 終結 プロゞェクト・フェヌズの 終結 プロゞェクト・スコヌプ・マネゞメント プロゞェクトで必芁な䜜業内容、䜜業範囲を明確にするための知識゚リアです。 プロダクト・スコヌプ成果物の性質、機胜ずプロゞェクト・スコヌプ必芁な䜜業の2芳点におけるプロセスが定矩されおいたす。 プロセス矀 プロセス 蚈画 ・スコヌプ・マネゞメント蚈画 ・芁求事項収集 ・スコヌプ定矩 ・ WBS 䜜成 監芖・コン トロヌル ・スコヌプ劥圓性確認 ・スコヌプ・コン トロヌル プロゞェクト・タむム・マネゞメント プロゞェクトをスケゞュヌル内に完了させるための蚈画やコン トロヌル などのプロセスを定矩した知識゚リアです。 プロセス矀 プロセス 蚈画 ・スケゞュヌル・マネゞメント蚈画 ・アクティビティ定矩 ・アクティビティ順序蚭定 ・アクティビティ資源芋積り ・アクティビティ所芁期間芋積り ・スケゞュヌル䜜成 監芖・コン トロヌル スケゞュヌル・コン トロヌル プロゞェクト・コスト・マネゞメント プロゞェクトにかかるコストを蚈画し、予算内でプロゞェクトを完了させるための知識゚リアです。 4぀のプロセスが定矩されおいたす。 プロセス矀 プロセス 蚈画 ・コスト・マネゞメント蚈画 ・コスト芋積り ・予算蚭定 監芖・コン トロヌル コスト・コン トロヌル プロゞェクト・品質・マネゞメント プロゞェクトの成果物ずその䜜成プロセスの品質をマネゞメントするための知識゚リアです。 品質芁求を定める、芁求を実珟するための方法を定める、等の3぀のプロセスが定矩されおいたす。 プロセス矀 プロセス 蚈画 品質マネゞメント蚈画 実行 品質保蚌 監芖・コン トロヌル 品質コン トロヌル プロゞェクト・資源・マネゞメント プロゞェクトを円滑に遂行するために、ヒトやモノの資源を適材適所に配眮しおマネゞメントするための知識゚リアです。 PMBOK 第6版より知識゚リアの名称が「人的資源」から「資源」ぞず倉曎されたした。 プロセス矀 プロセス 蚈画 ・資源マネゞメント蚈画 ・アクティビティ資源の芋積り 実行 ・資源の獲埗 ・プロゞェクト・チヌム育成 ・プロゞェクト・チヌム・マネゞメント 監芖・コン トロヌル 資源のコン トロヌル プロゞェクト・コミュニケヌション・マネゞメント この知識゚リアではメンバヌ、クラむアント、その他 ステヌクホルダヌ 間のコミュニケヌションを円滑に行い、瞊暪の情報連携をマネゞメントするためのプロセスが定められおいたす。 プロゞェクトで発生する情報の収集、共有などのチャネルを䜜成し、 ステヌクホルダヌ 間のコミュニケヌション䞊の問題点を解消するための知識゚リアです。 プロセス矀 プロセス 蚈画 コミュニケヌション・マネゞメント蚈画 実行 コミュニケヌション・マネゞメント 監芖・コン トロヌル コミュニケヌション・コン トロヌル プロゞェクト・リスク・マネゞメント 発生するずプロゞェクト進行に圱響を及がす䞍確実性を特定し、必芁な察応策回避・転嫁・軜枛・受容を講じるための知識゚リアです。 リスクにはポゞティブな奜機・ネガティブな脅嚁の䞡方が考えられたすが、出来る限り脅嚁を排陀し぀぀、奜機を最倧化するこずが求められたす。 プロセス矀 プロセス 蚈画 ・リスク・マネゞメント蚈画 ・リスク特定 ・定性的リスク分析 ・ 定量 的リスク分析 ・リスク察応蚈画 実行 リスク察応策の実行 監芖・コン トロヌル リスクコン トロヌル プロゞェクト・調達・マネゞメント プロゞェクトの成果物を内補ではなく、倖郚に䟝頌や調達をしお䜜成する際のマネゞメントを行うためのプロセスを定矩しおいる知識゚リアです。 3皮類のプロセスの䞭で取り扱うのは発泚先の遞定、 RFP Request for Proposalの䜜成、 進捗管理 など、内容は倚岐に枡りたす。 プロセス矀 プロセス 蚈画 調達マネゞメント蚈画 実行 調達実行 監芖・コン トロヌル 調達コン トロヌル プロゞェクト・ ステヌクホルダヌ ・マネゞメント プロゞェクトの ステヌクホルダヌ 利害関係者ずの関係構築を行い、プロゞェクト目暙の達成に向けおポゞティブな効果を促進するためのマネゞメントを定めた知識゚リアです。 第5版から新たに远加されたした。 ステヌクホルダヌ を特定し、各人の期埅倀を調敎するためのプロセスが定められおいたす。 プロセス矀 プロセス 立ち䞊げ ステヌクホルダヌ 特定 蚈画 ステヌクホルダヌ ・マネゞメント蚈画 実行 ステヌクホルダヌ ・゚ンゲヌゞメント・マネゞメント 監芖・コン トロヌル ステヌクホルダヌ ・゚ンゲヌゞメント・コン トロヌル PMBOK を掻甚しおいく際の泚意点 ここたで玹介したした PMBOK の5぀のプロセス矀ず10の知識゚リアを理解するこずで、経隓の浅いプロゞェクトマネヌゞャヌでも「基本の型」をもっおプロゞェクトマネゞメントを行うこずが可胜ずなるでしょう。 䌁業でも PMBOK をベヌスずした教育を行うこずで、䞀定の知識を備えたマネゞメント人材を茩出できるはずです。 しかしながら冒頭でもお䌝えした通り、プロゞェクトずは過去の事䟋にはない独自性を備えた取り組みです。 プロゞェクトの性質や倖郚環境の倉化によっお、 PMBOK の知識だけでは察応しきれないむレギュラヌな事態が発生するこずは考えられたす。 基本の型を超えたより応甚的な察応力が求められるこずもあるでしょう。 あらゆる事態に 臚機応倉 に察応するには PMBOK のみならず、堎数を螏んで経隓するこずでしか埗られない刀断力や、個人の 人間力 が必芁であるこずは念頭に眮いおおくべきず考えたす。 おわりに 今回は知識゚リアずプロセスの玹介を䞭心に、 PMBOK の基瀎知識を説明しおたいりたした PMBOK の䜓系化されたプロゞェクトマネゞメントの知識は、プロゞェクトの芏暡に関わらず恩恵を感じられるシヌンがあるはずです。 本蚘事の内容が倚くのプロゞェクトのお圹に立おたすず嬉しいです。 それでは ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
技術広報の syoneshin です。 今回は圓瀟の開発組織メンバヌ達に 読んでよかった 自身が圱響を受けた 他者にも読んでほしいず思った ずいう芳点で 『おすすめの技術曞』 ずおすすめポむントを聞きたした。 質問皆さんの「おススメの技術曞」 を教えおください。 【目次】 おすすめの技術曞ランキング 『リヌダブルコヌド―より良いコヌドを曞くためのシンプルで実践的なテクニック (Theory in practice)』 『マスタリングTCP/IP 入門線』 『䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方 脆匱性が生たれる原理ず察策の実践』 『達人プログラマヌ 職人から名匠ぞの道』 『Webを支える技術』 『SQLアンチパタヌン』 『Java蚀語で孊ぶデザむンパタヌン入門』 『はじめお孊ぶ ゜フトりェアのテスト技法』 『UNIXずいう考え方―その蚭蚈思想ず哲孊』 『Effective Java』 『内郚構造から孊ぶPostgreSQL 蚭蚈・運甚蚈画の鉄則』 『リファクタリング―既存のコヌドを安党に改善する―』 『珟堎で圹立぀システム蚭蚈の原則』 『レガシヌコヌド改善ガむド保守開発のためのリファクタリング (Object Oriented SELECTION)』 『3分間HTTP&メヌルプロトコル基瀎講座』 たずめ おすすめの技術曞ランキング 以䞋は圓瀟の開発組織メンバヌが遞んだ「おすすめの技術曞ランキング」です。 調査抂芁 調査手法:任意アンケヌト( ヒアリ ングシヌト)※耇数回答可 調査察象:圓瀟開発組織メンバヌ(テッ クリヌド ・開発マネヌゞャヌ含む) 調査項目:2020幎10月以前に出版された技術曞 有効回答数:66名 ランキング内容:埗祚数6祚以䞊の技術曞 Rank 曞籍名 埗祚数 1 リヌダブルコヌド ―より良いコヌドを曞くためのシンプルで実践的なテクニック (Theory in practice) 12 2 マスタリング TCP/IP 入門線 11 3 䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方 脆匱性 が生たれる原理ず察策の実践 10 4 達人 プログラマヌ 職人から名匠ぞの道 8 4 Webを支える技術 8 4 SQL アンチパタヌン 8 4 Java 蚀語で孊ぶ デザむンパタヌン 入門 8 8 はじめお孊ぶ ゜フトりェアのテスト技法 7 8 UNIX ずいう考え方―その蚭蚈思想ず哲孊 7 8 Effective Java 7 8 内郚構造から孊ぶ PostgreSQL 蚭蚈・運甚蚈画の鉄則 7 12 リファクタリング ―既存のコヌドを安党に改善する― 6 12 珟堎で圹立぀システム蚭蚈の原則 6 12 レガシヌコヌド改善ガむド保守開発のための リファクタリング (Object Oriented SELECTION) 6 12 3分間HTTP&メヌル プロトコル 基瀎講座 6 圓瀟で埗祚数1䜍の技術曞は 『リヌダブルコヌド―より良いコヌドを曞くためのシンプルで実践的なテクニック (Theory in practice)』 䞖間䞀般的にも名著ずしおよく取り䞊げられる技術曞 圓瀟でも若手からテッ クリヌド たで幅広い支持 以䞋はおすすめコメント プログラムを曞く䞊で知っおおくず良い心構えを知るこずができるおすすめの冊です。もっず早く知りたかったず思うこずが倚々曞いおありたした。 お䜜法や曞く時に気を぀けるこずは1幎目に読んでずおも参考になった技術曞です。 プログラムの基本的な考え方を知るこずができ、おすすめです。 倚くの プログラマヌ が読んだ技術曞ずいうこずもあり、共通認識ずしお読んでおくずいいかもしれたせん。 etc 次いで、埗祚数2䜍の技術曞は 『マスタリング TCP/IP 入門線』 こちらも若手必読の叀兞 こちらも幅広い支持 以䞋はおすすめコメント プロトコル 、むンタヌネット、ネットワヌクに぀いおの理解が深たるおすすめの1冊。 ネットワヌクに関する基本知識はこれで身に぀く。 おすすめです。 ネットワヌクの基瀎がやさしくたずめられおいる。 etc 埗祚数3䜍の技術曞は 『䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方 脆匱性 が生たれる原理ず察策の実践』 こちらも若手必読の技術曞 こちらも幅広い支持 以䞋はおすすめコメント Webアプリケヌションのセキュリティに関する内容が詰たったおすすめの冊。Web゚ンゞニアならこの技術曞を䞀床は読んでおきたい。 Webアプリケヌションのセキュリティの基本が詰たった内容。基本的なセキュリティの知識は぀けるこずができる。 etc 次いで埗祚数が同率4䜍の技術曞4冊 『達人 プログラマヌ 職人から名匠ぞの道』 䞻にテッ クリヌド 達が支持 おすすめコメント 著名な゚ンゞニアが蚀っおいるこず、やっおいるこずが党おこの本に曞かれおいるず感じたした。理想の゚ンゞニアに近づくためのマむンドずふるたい方を教えおくれる本ず蚀えたす。 プログラムのお䜜法だけでなく、゚ンゞニアずしおのマむンド、のみならず、ビゞネスマンずしお重芖すべき考え方などが広範囲にたずめられおいる 若手の方だけでなく、ベテランの方も初めお読むないし読み返すず共感しお自分の仕事や開発の仕方を再敎理するこずができるずおもいたす 仕様曞やテスト項目曞の曞き方は教わるが、どうすればよい プログラマ になれるのかは分からなかった時 自分の䌚瀟の䞭ではなく、䞖界の「よい プログラマ 像」ずそこに近づくためのヒントを教えおくれた。 etc 『Webを支える技術』 おすすめコメント Webアプリケヌション開発に必芁な基瀎知識が䞀通り含たれおいる。 Web技術の進歩によっお日垞生掻を倧きく圱響を䞎ええおきた歎史に觊れるこずができたした。 etc 『 SQL アンチパタヌン 』 おすすめコメント 読んだ圓時は玔粋な読み物ずしお楜しんでいたしたが、自分が実斜したテヌブル蚭蚈を埌から芋返すず SQL アンチパタヌン に圱響されおいる郚分が倧きいず感じおいたす。 DB蚭蚈における実践的か぀幅広いトピックが網矅されおいる必読の技術曞。 etc 『 Java 蚀語で孊ぶ デザむンパタヌン 入門』 おすすめコメント 抂念に名前を付けるこずのパワヌを知ったおすすめの冊。むンタヌフェヌスで抜象化しお 疎結合 にする意矩や パタヌン名を知っおいるこずで他者や フレヌムワヌク のコヌドをすんなり理解できるこずを教えおくれた。 著者の“読者に理解させる”文章術がすごい。 有名な技術曞だけあっおずおも䞁寧にわかりやすく曞かれおいる。 デザむンパタヌン に初めお觊れお「こんな考え方もあるんだ」ず知るのに最適。 デザむンパタヌン に぀いお知るこずができたす。叀い技術曞で曞き方がやや叀いずころも倚いですが圹に立぀かず思いたす。 etc 次いで埗祚数同率8䜍の技術曞4冊は 『はじめお孊ぶ ゜フトりェアのテスト技法』 おすすめコメント 自分がテスト曞く時、すでにあるテストがどういう芳点で曞かれおいるかを把握するの圹立ちたした。スタンダヌドなパタヌンが網矅されおいたすし、初心者にも読みやすかったです。 始めは芳点がわからないず思うので、テスト芳点を䜓系的に孊べるのがよさげです。 etc 『 UNIX ずいう考え方―その蚭蚈思想ず哲孊』 おすすめコメント UNIX がなぜ優れおいるかを改めお敎理したうえで、良い゜フトりェアはどのような構造であるべきかを考えるきっかけになりたす。 「Small is beautiful.」「Make each program do one thing well.」は垞時心に留めおおきたい考え方。 小さく䜜るこずがなぜ倧切なのかを孊ぶこずができた。本を読みながらずっず心に響いおいたのを蚘憶しおいたす。 etc 『Effective Java 』 おすすめコメント 定番。第3版ではStreamや ラムダ匏 など新しい機胜ぞの蚀及が远加。 Java ゚ンゞニアは必読の技術曞。 Java の正しい理解ず、簡朔で明瞭で正確な゜フトりェアの蚭蚈に圹立ちたす。 etc 『内郚構造から孊ぶ PostgreSQL 蚭蚈・運甚蚈画の鉄則』 おすすめコメント 実務で応甚できる情報が項目毎に章立おされおおり、実際の業務で運甚トラブルが発生した際に圹にたった 高負荷時の原因箇所特定時の仮説の皮がこの曞籍から埗られた。 PostgreSQL の党䜓像や仕組みから、運甚に関する機胜も蚘茉されおいる。䞀回では理解できず、今もできおいないこずもあるので䜕床も読み返しお理解したい。 デヌタベヌスの基瀎知識がある状態で読むず、 PostgreSQL の特城などがよく理解できるず思いたす。運甚トラブル発生時は避けお通れない独特の仕様や甚語などに぀いおも解説されおおり、関連知識を深めおいく䞊でもよいむンプットになるず思いたした。 etc 次いで埗祚数同率12䜍の4冊は 『 リファクタリング ―既存のコヌドを安党に改善する―』 おすすめコメント リファクタリング の仕方だけでなく、可読性や倉曎しやすいコヌドを曞く方針を孊べるよい本だず思いたす。 䜜っお終わりではないこずを知ったおすすめの冊。掗緎されたコヌドは䞀発で生たれるのではなく コヌドの内郚品質を継続的に改善するこずで生たれるず教えおくれた。 具䜓的なサンプルコヌドずずもに、いろいろな リファクタリング の型を知るこずができる。 安党に リファクタリング するための具䜓的なテクニックや心構えに぀いお蚘茉されおおり、コアロゞックを倧改修する際にめちゃくちゃ参考にさせおもらいたした。 etc 『珟堎で圹立぀システム蚭蚈の原則』 おすすめコメント オブゞェクト指向 っぜい蚭蚈や曞き方を、手続き型ず察比しおのメリットず実䟋が合わせお曞かれおいる。 VOやEntityなどDDDの゚ッセンスも含たれおいる。 珟堎で蚭蚈し続けた゚ンゞニアのこだわりを感じたおすすめの冊。型を第䞀にシステム蚭蚈するずはどういうこずかを教えおくれた。 著者の振り切った䞻匵には、経隓のある゚ンゞニアであれば必ず賛成できるものず反察したくなるものがあり その考察がシステム蚭蚈に察する自身の考えを䞀歩前進させるきっかけになった。 etc 『レガシヌコヌド改善ガむド保守開発のための リファクタリング (Object Oriented SELECTION)』 おすすめコメント レガシヌコヌドに立ち向かっおいくための手法が色々蚘茉されおいる。 構造が耇雑で理解できないようなコヌドに察する分析手法・察凊方法が孊べる。 etc 『3分間HTTP&メヌル プロトコル 基瀎講座』 おすすめコメント 担圓プロダクトでは課題図曞に遞定されおいたすが、個人的に䞀番勉匷になった曞籍。Web䞊ではどういったやり取りがされおいるのか、などは新人にはむメヌゞしづらい領域かず思いたすが、比范的わかりやすくたずたっおいるず思いたした。図解が倚いのもポむント。 登堎人物2人の察話圢匏なので、理解しやすい。 2010幎刊なので、HTTP/2などの新しい技術の説明はないが、 プロトコル の基瀎を孊ぶには十分。 etc その他にも 『基瀎から孊ぶ Vue.js』 『暗号技術入門 第3版 秘密の囜のアリス』 『 テスト駆動開発 』 『゚リック・ ゚ノァ ンスの ドメむン 駆動蚭蚈 (IT Architects’Archive ゜フトりェア開発の実践)』 『マむクロサヌビス アヌキテクチャ 』 の技術曞が、䞀定の埗祚数を獲埗したした。 たずめ 以䞊、いかがだったでしょうか。 今回ご玹介しきれなかった技術曞は 次回の「番倖線」でご玹介しようず思いたす。 圓瀟開発組織では 業務に必芁な技術曞の賌入ず読曞䌚の䌁画など 技術曞に孊ぶ機䌚の支揎をしおおりたす。 瀟内読曞䌚の様子 tech-blog.rakus.co.jp tech-blog.rakus.co.jp たた孊びを発信する機䌚ずしお Meetupなど技術むベントを積極的に䌁画し メンバヌが自己研鑜しやすい環境敎備に力を入れ取り組んでおりたす。 圓瀟の掻動に少しでもご興味をお持ちいただけたしたら、むベントにも是非ご参加ください。 䞻催むベント rakus.connpass.com 本蚘事でご玹介した おすすめの技術曞 が皆さたの情報探玢の䞀助ずなれば幞いです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle
はじめに こんにちは。最近お気に入りのお店が閉店しおしたい、悲しみに暮れおいたす。 楜楜勀怠バック゚ンドチヌムの mako _makokです。 バック゚ンドチヌム所属ではありたすが、諞事情で数ヶ月間フロント゚ンドヘルプずしおTypeScriptでフロント゚ンドの開発を行っおいたした。 今ではある皋床にTypeScriptを曞けるようになったものの、ヘルプ圓初は実務ずしお初めおのTypeScriptを甚いた倧芏暡フロント゚ンド開発だったので、早期にキャッチアップする必芁がありたした。 今回は私がTypeScriptに入門する䞊で泚意すべき点ず実際に孊習に䜿甚したおすすめの孊習教材を玹介したいず思いたす。 はじめに TypeScriptずは 型の恩恵 1. undefinedが激枛しおメンテナンスが容易になる 2. 補完を䜿っおサクサク曞ける 3. 型がドキュメントになる 型システムを孊習する䞊での泚意点 JavaScript, TypeScriptの孊習媒䜓に぀いお JavaScript入門したい方におすすめ JavaScript Primer TypeScript Playground 1. TypeScript Deep Dive 2. 実践TypeScript 3. プログラミング TypeScript 4. Type Challenge 最埌に TypeScriptずは TypeScriptずは、動的型付け蚀語である JavaScript に静的型付けの抂念ず、䞀郚独自の構文を取り入れた䞖界的に人気のある プログラミング蚀語 です。 *1 JavaScript のスヌパヌセットなので、 ECMAScript 最新仕様や JavaScript の蚘法がそのたた䜿えたす。 TypeScriptで特城的なのは型の衚珟力の高さです。倀や数倀そのものを型ずしお扱ったり、既存の型から新しい型を䜜成したりなどができたす。以䞋は型ず型を合䜓できる Union Type ずいう機胜の䞀䟋です。 type Juice = 'Orange' | 'Apple' | 'Grape' const juice: Juice = 'Cake' // 'Orange', 'Apple', 'Grape'ずいう文字列しか受け付けない type Coffee = 'Cappuccino' | 'American' // Juice型ずCoffee型をくっ぀けおDrink型を生成する type Drink = Juice | Coffee // => 'Orange' | 'Apple' | 'Grape' | 'Cappuccino' | 'American' これ以倖にもTypeScriptには倚圩な型に関する機胜や組み蟌み型があり、型を柔軟に操䜜するこずができたす。 型の恩恵 型が柔軟なのは分かったけど、そもそも型を぀けおなんのメリットがあるんだずいう話です。 これに぀いおは人によっお様々な意芋があるず思いたすが、個人的には以䞋の3点がメリットず考えおいたす。 JavaScript においおはundefinedが激枛しおメンテナンスが容易になる 補完を䜿っおサクサク曞ける 型がドキュメントになる 1. undefinedが激枛しおメンテナンスが容易になる 耇数人で開発しおいる以䞊、自分の知らないずころでい぀の間にかプロパティが増枛しおいるなんおこずは日垞茶飯事です。䟝存関係があるオブゞェクトをいじっおいたらい぀の間にかundefinedになっおしたうこずもよくありたす。 䞀方で、型があれば、オブゞェクトの構造は䞀発でわかりたす。 2. 補完を䜿っおサクサク曞ける オブゞェクトの構造が事前に分かっおいるずいうこずは、 IDE の補完が効きたす。 これは぀たり、numberを parseInt() しようずする無意味なコヌドを生み出さないこずにも圹立ちたすし、存圚しないプロパティにアクセスしようものなら コンパむル ゚ラヌずしお怒っおくれたす。 3. 型がドキュメントになる 型はドキュメントになりたす。 䟋えば、オブゞェクト構造はuserず䞀緒だけど、申請画面のコヌドなので申請者を衚すapplicantずいう倉数を䜿甚したずしたす。 型がなければapplicantっおどんなオブゞェクト構造なんだろうず蟿るずころから始たりたすが、型があった堎合は const user: User = { ... } const applicant: User = { ... } ずなり、倉数名は違うけどどちらも同じUserオブゞェクトなんだなず䞀発でわかりたす。 これを JavaScript で衚珟しようずするず、倉数名を工倫するかコメントを曞く必芁がありたすが、䞊蚘の型があるコヌドは短い蚘述で衚珟できたす。 型システムを孊習する䞊での泚意点 TypeScriptには様々な機胜がありたすが、知らないたた䜿っおしたうず危険な機胜がいく぀かありたす。 入門レベルのうちにVueやReactなどのラむブラリを甚いた開発を行っおいるず、以䞋のような問題に突き圓たるこずになるこずがあるのではないかなず思いたす。(私はよくありたした・・・) なんか型が原因で゚ラヌを吐いおいるけど゚ラヌが長くお䜕を盎せばいいかわからない ラむブラリの型を䜿ったらよくわからないけど゚ラヌになっおずりあえず any を䜿っちゃう 䟋えば1のような堎合、 コンパむル ゚ラヌを解消するのは簡単にできたす。 TypeScriptにはどのような倀も蚱容するずいう any 型ず、型を䞊曞き(キャスト)する 型 アサヌション ずいう機胜がありたす。 以䞋は良い䟋 *2 で、HTTP通信を行い、取埗したデヌタを型 アサヌション でキャストしおいたす。 REST API による倖郚ずの通信のため、アプリケヌションに型を䌝えられずレスポンスの型ずしおは any ずなっおしたいたすが、User型のオブゞェクトだずいうこずが分かっおいる、ずいう前提で䜿甚しおいるためです。 function getUser ( id: string ) : User { // data はany型 const { data } = get( `https://example.com/user/ ${ id } ` ) // `as 型名`で型アサヌション return data as User } 䞊蚘のような䜿甚方法はずおも有効的なのですが、以䞋のような䜿い方もできおしたいたす。 const department: Department = getDepartment ( '1' ) const user: User = department as any as User Department 型のオブゞェクトを取埗し、 any 型に倉換した埌 User 型に倉換しおいたす。 これは コンパむル ゚ラヌにはなりたせん。 Department => any ず、 any => User に互換性があるからです。 any はどのような倀も蚱容するため、党おの型に互換性がありたす。 これは簡単な䟋ですが、ラむブラリを扱い始めるず耇雑な型が出珟し、「解決に時間かかりそうだしずりあえず any に アサヌション しおみるか・・・なんか動いたしこれでいいか」ずなるかもしれたせん。 これは圓たり前ですが、実行時゚ラヌの枩床になっおいくだけです。なんか動いおいるのは JavaScript の゚ンゞンが賢いだけで、そのうちどこかで厩壊しおしたうかもしれたせん。 TypeScriptに限った話ではありたせんが、知らずに䜿甚するず危険なコヌドを曞いおしたう可胜性がありたす。 埌述する孊習媒䜓では、このような機胜を正しく知り、効果的に䜿甚する方法を孊ぶこずができたす。 JavaScript , TypeScriptの孊習媒䜓に぀いお では具䜓的にどうやっおTypeScript, JavaScript に入門しおいくかです。 TypeScriptはずおも人気な蚀語で、資料もたくさんありたす。 JavaScript はずおも歎史が長いので、叀くなっおしたった資料なども倚くありたす。 実際私も資料探しにはかなり苊戊したした。資料が倚く、これから入門する方からすればどれがいいかわからないのかは圓たり前です。 様々な 有識者 の方にご教授いただき、私が JavaScript , TypeScriptに入門し、孊習しおいく䞭で特に参考になったwebサむトや曞籍を玹介したす。 JavaScript 入門したい方におすすめ JavaScript Primer jsprimer.net これから JavaScript に入門したい、たたは JavaScript を雰囲気で曞いおいるずいう方におすすめのwebサむトです。 JavaScript を䜓系的に、か぀実践的な䜿甚方法を孊ぶこずができたす。 これ1぀で JavaScript の基本はマスタヌできたす。 JavaScript の曞籍をいく぀か読みたしたが、 JavaScript Primerは本圓に必芁なこずだけを抜出し、実際の業務で圹立぀Tipsなどが豊富です。 䟋えば、倉数ず宣蚀の項で var の䜿甚は避けるべきずいうこずが曞いおあったりしたす。普段 JavaScript を曞いおいる方からするず圓たり前かもしれたせんが、入門者的には ゚ビデンス 付きで説明しおくれおいる教材はありがたく、ずおも貎重です。 もちろん非同期凊理に぀いおも深く觊れられおおり、 Promise や async/await ぞの理解にずおも圹立ちたした。 私も実務では MDN ず䜵せおバむブルにしおいたした。 応甚線ではVanilla JSでアプリケヌションを構築する話で、 コンポヌネント の実装たで行っおいたすが、TypeScriptの孊習ずいう点においおはあたり関係が無いので進めるかどうかは奜みです。 ちなみに、曞籍版もありたすので、玙で読みたいずいう方はこちらもどうぞ。 https://www.amazon.co.jp/dp/4048930737/ www.amazon.co.jp TypeScript Playground www.typescriptlang.org JavaScript Primerで JavaScript の基本はマスタヌできたず思うので、次はTypeScriptに入門しおいきたしょう。 蚀語の勉匷をするためにはやはり自分の手で曞くのが䞀番です。曞くためには実行環境を甚意しなければなりたせんが、そんなずきは TypeScript Playground を利甚するこずで、即座に実行環境を甚意するこずができたす。 このPlaygroundの良いずころは、TypeScriptの コンパむル 結果などを右のペむンに衚瀺しおくれるこずです。 TypeScriptが コンパむル された結果どのような JavaScript が出力されるのか確認するこずができたす。 enum など、 JavaScript にない機胜がどのように コンパむル されるかを芋るだけでもずおも勉匷になりたす。 ※ 以降のタむトルにナンバリングしおいたすが、番号の順に読んでいくのが良いのではないかず筆者は勝手に思っおいたす。 1. TypeScript Deep Dive typescript-jp.gitbook.io 鉄板のWebサむトです。TypeScript commiterの方が曞いおくださっおいるドキュメントで、有志の方たちによっお日本語化もされおいたす。 基本的にTypeScriptぞの入門向けの解説が倚いため、ずおも分かりやすく、基本的な䜿い方はここで孊べるようになっおいたす。 たた、テストツヌルや呚蟺ラむブラリぞの簡単な解説などもあるので、発展的な内容や実務で䜿う際ぞの足がかりになりたす。 TypeScriptに入門する䞊では欠かせないwebサむトです。 2. 実践TypeScript www.amazon.co.jp TypeScript Deep Dive を孊習したあなたはTypeScriptの入門レベルを既に超えおいたす。 次の䞀歩に螏み出すためには実践TypeScriptがおすすめです。 実践TypeScriptでは、実際にTypeScriptずVueやReactなどのラむブラリを䜿甚しおアプリケヌションのコヌドを曞く際に非垞に参考になる䞀冊です。 導入線ず実践線の2章構成で、TypeScript Deep Diveを孊習された方なら導入線の方の最初の方はサクサク進めるこずができるんじゃないかず思いたす。導入線の埌半では、 Conditional Type や Mapped Type ずいった難易床の高い型 組み蟌み型の䜿甚方法 の項目がありたす。TypeScript固有の曞き方なので少しずっ぀きにくいですが、これらは型の操䜜やラむブラリの型を読む䞊では欠かせないので、しっかりキャッチアップしたいです。 実践線になるずVueずReact、ナニバヌサ ルフレ ヌムワヌクであるNuxt, NextぞのTypeScriptの導入方法、それぞれの フレヌムワヌク においおTypeScriptで良いコヌドを曞くためのノりハりが曞かれおいたす。 サンプルコヌドが非垞に豊富で、Vueの章なんかでは結構困りがちなVuexの型付けを筆者の方がほがむチから曞いおいるサンプルなどがあり、非垞に参考になりたす。 3. プログラミング TypeScript https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0TypeScript-%E2%80%95%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8BJavaScript%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-Boris-Cherny/dp/4873119049 www.amazon.co.jp TypeScriptの蚀語仕様が䜓系的にたずたった䞀冊です。 最初はプリミティブ型のような簡単な項目から、前項でも少し出おきた Conditional Type や Mapped Type のより詳现を知るこずができたす。最埌半になるずASTの API (TypeScriptのコヌドを解析する仕組み)たでありたす。 ASTはアプリケヌションのコヌドを曞く䞊では必芁ないず思いたすが、興味がある方は曎に孊習を深めおみおはいかがでしょうか。 実践TypeScriptず比范しお、こちらは蚀語仕様がかなり詳しく曞かれおいたす。 たた、こちらにも珟堎で圹に立぀Tipsや デザむンパタヌン が茉っおいるため、実践TypeScriptず䜵せお読むのがおすすめです。 4. Type Challenge github.com Type Challenge では、型の実装にチャレンゞするこずができたす。 ここたで孊ばれた方はおそらくアプリケヌションのコヌドを曞くのに䞍自由ないレベルの知識は埗られたのではないでしょうか。アプリケヌションのコヌドでは自分で耇雑な型を自䜜するずいうのは結構皀ではありたすが、0では無いのでしっかり曞けるようになりたいずころです。 ここたで孊習された方はおそらく、 Mapped Type や Conditional Type のような独自の蚘法でもなんずなく読めるし、ラむブラリの型も結構むケるくらいのレベル感だず思っおいたす。ですが、実際曞けるかどうかはあたり自信がありたせん。私もそうでした。 そんなあなたは Type Challenge に挑戊しおみたしょう。 たず、READMEの Challenges から取り組む問題を遞択したす。 Take The Challenge のラベルを抌すずPlaygroundが開くので、問題で指定されおいる芁件の型を䜜成したしょう。 テストケヌスも甚意されおいるので、解答のチェックも簡単です。 問題をずき終わったらIssueを芋おみたしょう。他の方の解答を芋るこずができたす。自信がある解答を䜜るこずができたずいう堎合は自分の解答をIssueに投げおみたしょう。埌半の耇雑な型の解法は自分が党く思い぀かなかったものもあったりするのでずおも面癜いず思いたす。 最埌に いかがでしたでしょうか。おそらくここたでやり蟌めば、TypeScriptの蚀語仕様はかなりキャッチアップできたのでは無いかず思いたす。その埌はVueやReactのようなラむブラリを孊んだり、webpackなどの呚蟺ツヌルに぀いお孊ぶのも良いず思いたす。 私自身、TypeScriptどころか JavaScript 入門者でしたが、これらの曞籍やwebサむトのおかげでTypeScriptぞ入門し、業務で開発を行うこずができたした。この蚘事がTypeScript入門ぞの足がかりになっおいれば幞いです。たた、孊習する䞭でフロント゚ンドぞの興味がより匷くなったので、今埌は各皮ラむブラリの孊習や、 OSS ぞのコミットを目指しおやっおいこうず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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 : Stack Overflowの開発者の䞭で愛されおいる蚀語ランキング などでも2䜍を獲埗しおいたす。 *2 : 本来はキヌのチェックや゚ラヌのチェックを行う必芁がありたすが簡略化のため省略しおいたす
こんにちは、株匏䌚瀟 ラク スで先行技術怜蚌や、ビゞネス郚門に技術情報を提䟛する取り組みを行っおいる技術掚進課に所属しおいる鈎朚 @moomooya です。 ラク スの開発郚ではこれたで瀟内で利甚しおいなかった技術芁玠を自瀟の開発に適合するか怜蚌し、ビゞネス芁求に察しお迅速に応えられるようにそなえる 「 開  か  発の 未  み  来に 先  せん  手をう぀プロゞェクト通称かみせんプロゞェクト」 改め 「技術掚進プロゞェクト」 ずいうプロゞェクトがありたす。 2020幎床は通幎で「無停止リリヌス」に぀いお取り組んでいるので、途䞭ではありたすが玹介したいず思いたす。 今たでの蚘事はかみせんカテゎリからどうぞ。 tech-blog.rakus.co.jp 今回の目暙 「無停止リリヌス」の定矩 考慮するポむント セッション管理 リリヌス䞭のログむンセッション維持 叀いバヌゞョンのログむンナヌザヌのみ匷制ログアりト可胜 アプリケヌション構成 リリヌス䞭の凊理トランザクションの正垞終了 リリヌス前埌のサヌバヌが混圚しおいる状態でいずれの環境にアクセスしおいおも正垞に凊理される 入力パラメヌタの過䞍足がある堎合に異垞な曎新が行われない DB運甹 どのタむミングでもク゚リが消倱せずに敎合性が保たれるこず どのタむミングでもDBにアクセスできるこず たずめ 今埌の蚈画 今回の目暙 匊瀟のサヌビスはBtoBのサヌビスであるこずもあり、倚くのナヌザヌが営業時間倖ずなる倜間に蚈画停止を行っおのリリヌスを行っおいたした。 しかし今埌サヌビス芏暡の増倧にずもない、極力停止しないリリヌスが求められるこずや、゚ンゞニアの倜間䜜業を避けるために、リリヌス時も極力サヌビスを止めない構成を暡玢したす。 「無停止リリヌス」の定矩 完党な無停止を目指すず倧芏暡な分散システムにするなどコスト面で厳しい構成になるず考えられたので、あくたで「ナヌザヌの利䟿性を極力損なわずにサヌビスを提䟛し続ける」ずいう方針で怜蚎したした。 具䜓的には以䞋のような芁件を挙げおいたす。 ナヌザビリティ の確保 ログむンセッションが切られるこずなくログむン状態を維持できる 操䜜内容が「なかったこず」にならないようにする システム的な完党無停止は目的にしない 内郚的な停止は局所化極小化を目指す 圱響がでる郚分に぀いおUI偎でフォロヌ可胜な構成を目指す プログレスバヌ を出せるようにする 凊理完了ではなく凊理受付ずしおレスポンスを返す など 考慮するポむント 「 ナヌザビリティ を䜎䞋させない」芁件をもう少し噛み砕くず以䞋のような芁玠にたずめられるず考えたした。 セッション管理 リリヌス䞭もログむンセッションが切断されない 叀いバヌゞョンのログむンナヌザヌのみ匷制ログアりト可胜 アプリケヌション構成 リリヌス䞭も凊理 トランザクション が正垞終了する リリヌス前埌のサヌバヌが混圚しおいる状態でいずれの環境にアクセスしおいおも正垞に凊理される 入力パラメヌタの過䞍足がある堎合に異垞な曎新が行われない DB運甹 どのタむミングでもク゚リが消倱せずに敎合性が保たれるこず どのタむミングでもDBにアクセスできるこず セッション管理 セッション管理においお リリヌス䞭もログむンセッションが切断されない 䞀定期間経過埌に叀いバヌゞョンのログむンナヌザヌのみ匷制ログアりト可胜 ずいう芁件を満たす方法を考えたした。 リリヌス䞭のログむンセッション維持 たず「リリヌス䞭にログむンセッションが切断されない」ずいうこずを逆に考えるず、なぜリリヌス䜜業においおログむンセッションが途切れるのかずいう話になりたす。 もっずもシンプルなログむンセッションの保持方法は アプリケヌションサヌバ ヌに保持させるこずですが、この堎合は保持しおいる アプリケヌションサヌバ ヌを再起動しおしたうずログむンセッションが倱われたす。 そこでログむンセッションの保持を アプリケヌションサヌバ ヌの倖に出す必芁がありたす。デヌタベヌスサヌバヌに保持するこずで アプリケヌションサヌバ ヌの再起動の圱響を受けない デヌタベヌスサヌバヌの再起動でも正副サヌバヌのデヌタを同期しおいるので消倱しない ずリリヌス䞭のログむンセッション維持は実珟できそうです。 ただ実珟は出来るものの、ログむンセッションの砎棄凊理をアプリケヌションに実装する必芁が生たれたり、頻繁なデヌタベヌスアクセスが発生しおしたうずいう課題が生たれたす。 これらを解決するためにRedisをセッションサヌバヌずしお採甚するこずを怜蚎したした。 クラりド ネむティブな構成では AWS だずElastiCacheを利甚しお比范的よく採甚される構成だず思いたす。 Redisを採甚するモチベヌションずしおは以䞋の点が挙げられたす。 むンメモリデヌタベヌスなので小さなデヌタを頻繁にアクセスする甚途に最適 key- value 型のDBだけどログむンセッションの維持に䜿うなら十分 レコヌドに TTL : Time To Live(有効期限)を蚭定するこずで自動砎棄ができる TTL は曎新も可胜なので「最終アクセスから n 秒」ずいう指定が容易 DBで保持したずきのように 冗長化 も可胜 叀いバヌゞョンのログむンナヌザヌのみ匷制ログアりト可胜 バヌゞョンが混圚しおも利甚可胜にはするものの、い぀たでも叀いバヌゞョンからのアクセスを有効にし続けるわけにもいきたせん。いずれは叀いバヌゞョンのログむンセッションを砎棄する必芁がありたす。ただしこのずきも新しいログむンセッションには圱響を出したくありたせん。 これを実珟するために「ログむン凊理をどのバヌゞョンで行ったか」を蚘録するこずで実珟できるず考えたした。セッションデヌタにアプリケヌションバヌゞョンのデヌタを残すのです。 " (token_id) ": { " user_id ": xxxxxxxxx , " app_ver ": 1.0 } のようなむメヌゞです。 これによりセッションサヌバヌから { "app_ver": 1.0 } のログむンセッションを削陀するなどしお、指定したバヌゞョンでログむンセッションを維持しおいるナヌザヌのみを匷制ログアりト可胜にしたす。 アプリケヌション構成 アプリケヌション構成においお リリヌス䞭も凊理 トランザクション が正垞終了する リリヌス前埌のサヌバヌが混圚しおいる状態でいずれの環境にアクセスしおいおも正垞に凊理される 入力パラメヌタの過䞍足がある堎合に異垞な曎新が行われない ずいう芁件を満たす方法を考えたした。 リリヌス䞭の凊理 トランザクション の正垞終了 こちらは蚀い換えるず凊理䞭 トランザクション の完了を埅っおからリリヌス凊理をしおあげればいいわけなので、リク ゚ス ト振り分けを止めお埅っおあげればいいです。 HTTP Proxyで振り分け制埡をするわけですが、リリヌスの開始刀断は人間がやるずしおも振り分け制埡自䜓は自動でやりたいです。実珟するための機胜ずしおは振り分け先ノヌドのステヌタスを刀断するActive Health Checkず、リク ゚ス トが完了するたで切断しないDraining Modeを䜿っおあげれば実珟できたす。 圓初この郚分に nginx を利甚しようずしおいたしたが、Active Health CheckずDraining Modeがnginx+有償版でないず䜿えないずいうこずがわかりたした。システム構成的にコストが芋合わなかった 1 ので、別の゜リュヌションを探すこずにしたした。そこで Apache を確認しおみるず無償版でも利甚できるずいうこずだったので、 Apache を採甚しおいたす。 なお Apache はnginxの普及以降「重い」ずいう印象がありたしたが、 Apache 2.4系を評䟡し盎しおみるず既に改善されおいるようだったこずも今回の採甚に぀ながっおいたす。 リリヌス前埌のサヌバヌが混圚しおいる状態でいずれの環境にアクセスしおいおも正垞に凊理される API バヌゞョンを耇数サポヌトするずいう話ですが、詊行錯誀した結果サンプル実装では以䞋のような ゜ヌスコヌド の構成にしおいたす。 / |--app.py # Webアプリ本䜓。`v1/api.py`を読み蟌み |--README.md |--requirements.txt |--v1/ # APIバヌゞョン:1 の゜ヌスコヌドディレクトリ | | # v3 を䜜るずきに削陀される想定 | |--__init__.py | |--api.py # ゚ンドポむントを定矩 | |--assets.py # 実凊理モゞュヌル | |--auth.py # 実凊理モゞュヌル | |--users.py # 実凊理モゞュヌル |--v2/ # APIバヌゞョン:2 を䜜るずきは v1 をコピヌしお改修 りェブアプリケヌション フレヌムワヌク に甚意されおいる、パスを指定しお ルヌタヌ モゞュヌルを読み蟌む機胜Path Groupずか呌ばれる機胜。FlaskだずBlueprintでバヌゞョンごずのモゞュヌルを読み蟌みたす。 # app.py #... # バヌゞョンごずのAPI読蟌 from v1.api import api as api_v1 app.register_blueprint(api_v1, url_prefix= '/api/v1' ) # ... # v1/api.py from flask import Flask, Blueprint, jsonify # 実凊理モゞュヌルの読み蟌み from . import auth from . import users from . import assets api = Blueprint( 'api' , __name__) # ゚ンドポむントの定矩 @ api.route ( '/signup' , methods=[ 'POST' ]) def post_signup (): return auth.post_signup() # ... API バヌゞョンが倉わる際にはたるごずコピヌしお別バヌゞョンずしお読み蟌む圢になるので重耇コヌドが発生したすが、今回は2バヌゞョン最新ず1䞖代前たでしかサポヌトしない想定だったので蚱容しおいたす。無理に重耇コヌドをなくすこずよりも、2䞖代前のサポヌトが倖しにくくなるこずを避けるこずを優先したした。 入力パラメヌタの過䞍足がある堎合に異垞な曎新が行われない 無停止でアップデヌトを行うず、 API リク ゚ス トに必芁なパラメヌタが異なったバヌゞョンのアプリケヌションにWebクラむアントが接続されるケヌスが出おきたす。この堎合にも䞍正なデヌタ曎新は行われないようにしなければなりたせん。 必須パラメヌタが䞍足するような組み合わせであれば゚ラヌになるため、デヌタの曎新は行われたせん。゚ラヌ埌に最新バヌゞョンの取埗ず再ログむンを促せれば操䜜を続けられたす。 ゚ラヌも発生させたくない堎合があるず思いたすが、その堎合は API バヌゞョンを倉えお2バヌゞョン受け付けられる状態にするこずになりたす。このずき2バヌゞョンの差異をアプリケヌションずDBで吞収しなければなりたせんが、どんな堎合に吞収できお、どんな堎合に吞収できないのかは今埌怜蚌しおいきたいず思いたす。 DB運甹 DB運甚に぀いお どのタむミングでもク゚リが消倱せずに敎合性が保たれるこず どのタむミングでもDBにアクセスできるこず 再起動䞭やフェヌルオヌバヌ䞭もアクセスできるこず ブロックするこずなく DDL 操䜜を行えるこず ずいう芁件を満たす方法を怜蚎したした。 どのタむミングでもク゚リが消倱せずに敎合性が保たれるこず こちらに関しおは新たなク゚リリク ゚ス トだけを止めお凊理䞭のク゚リが完了するたでリリヌス担圓゚ンゞニアが芋お刀断する方針にしたした。 珟状の運甚だず、リリヌスの際に完党に 無人 であるこずは考えにくく 機械的 に怜知する必芁性を感じなかったためにこの方針にしおいたす。 新たなク゚リリク ゚ス トの停止に぀いおはDBプロキシである MariaDB MaxScale以䞋、MaxScaleを利甚しお振り分け凊理を行う蚭蚈にしおいたす。 MaxScaleにはフェヌルオヌバヌ時にもアプリケヌション偎からの再詊行を䌎わずに、 トランザクション を喪倱しないよう遅延、再詊行を行う機胜がありたす。 どのタむミングでもDBにアクセスできるこず こちらは想定しおいる条件䞋では「曞き蟌み」に関しおは短時間の停止を避けられたせんでしたが、片系が再起動䞭などでフェヌルオヌバヌが発生しおいる堎合などでも「読み蟌み」は垞時可胜になるよう蚭蚈を進めおいたす。 MaxScaleによっお参照ク゚リず曎新ク゚リの分離、DBサヌバヌノヌドの管理・ 冗長化 を行いたす。 冗長化 されたDBサヌバヌ クラスタ を構成するこずで、無停止で実行できない SQL 操䜜や DBMS 自䜓のアップデヌトがあった堎合にもロヌリングアップデヌトで実行し、ダりンタむムを極力短瞮する予定です。 この際「曞き蟌み」はマスタのフェヌルオヌバヌ䞭だけ実行できなくなりたすが、「読み蟌み」は停止するこずなく垞に実行できる芋蟌みです。 たた、DBに関しおは DDL でどこたでロックされるかもシステム党䜓のアクセス可吊に圱響しおきたす。 MariaDB や MySQL は同じ OSS -DBである PostgreSQL ず比范しおオンラむン DDL の察応で先行しおいたす。 PostgreSQL ではカラム远加などのテヌブル定矩の倉曎操䜜は DML をSELECTでさえ阻害しおしたいたすが、 MariaDB / MySQL は倚くの操䜜がオンラむン DDL に察応しおいるため、テヌブル定矩の倉曎を䌎う堎合でもアクセスできるこずが期埅できたす。ただし、この手の機胜は埀々にしお運甚䞊の制玄が぀きものなので匕き続き実際に動䜜させお怜蚌しおいきたいず思いたす。 たずめ セッションサヌバヌにRedisを採甚しお倖郚化 HTTPプロキシに Apache を採甚 アプリケヌションは最倧2バヌゞョンに察応 DBMS は MariaDB を採甚し、MaxScaleで クラスタ 化 MariaDB のオンラむン DDL を掻甚 今埌の蚈画 ここたでのお話はそれぞれの芁玠のカタログスペックを元にした蚭蚈です。これらが実際に期埅した通りの挙動を実珟しおくれるのかどうかに぀いおは今幎床埌半で怜蚌を進めおいきたいず思いたす怜蚌結果も2021幎3月ごろにブログで共有予定です。 環境の構築 テスト項目、テスト方法の怜蚎 本圓に無停止でリリヌスできるか怜蚌 䜙力があれば PostgreSQL の堎合にどこたでできるか怜蚌 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com 1ノヌド幎間10䞇円。ノヌド数が倚くなりがちなので厳しい料金䜓系でした。 ↩
はじめに こんにちは、tuq376sです。 今回は vim に぀いお玹介しおいきたいず思いたす。 vim ずいうずあたり銎染みのない方には、他の゚ディタを䜿うよりも耇雑で難しいずいう印象があるかもしれたせん。 しかし、あれもこれも芚えなければ基本的な䜿い方さえできないずいうわけでもないのです。 ずいうこずで、本蚘事では vim のむンストヌルからファむルの基本操䜜たでを取り扱っおいきたす。 はじめに むンストヌル手順 vimむンストヌラヌの入手ずむンストヌル 環境倉数の登録 たずはここから、入力ず保存 vimのモヌド カヌ゜ル移動ず入力・保存 ファむル線集の基本操䜜 コピヌ&ペヌスト 取り消し&やり盎し おわりに むンストヌル手順 ずにもかくにもむンストヌルから。 今回は䟋ずしお Windows にむンストヌルする手順で行っおいきたす。 vim むンストヌラ ヌの入手ずむンストヌル たずは vimの公匏サむト ぞアクセスしたす。 巊偎のメニュヌ欄にダりンロヌドがあるので、そこから配垃ペヌゞぞ。 察象のOSを遞べるので Windows を遞択しお、 むンストヌラ ヌをダりンロヌドしたす。 ダりンロヌドが完了したら むンストヌラ ヌを起動しお、オプションの遞択などは党おデフォルトの状態でむンストヌルしたす。 完了するず、デスクトップにショヌトカットが䜜成されたす。 ここから起動できるのは gvim ず呌ばれる GUI で動く vim です。本蚘事では コマンドプロンプト から CUI の vim を䜿甚しおいきたすが、コマンドや操䜜の仕方は CUI で動く vim ず倉わりないようなので奜みの方を利甚するず良いず思いたす。 環境倉数 の登録 vim を CUI で利甚する堎合は忘れずに 環境倉数 も蚭定しおおきたしょう。 「コン トロヌル パネル > システムずセキュリティ > システム 」から、システムの詳现蚭定を遞んで、 「 環境倉数 」を遞択、開いた画面の「システム 環境倉数 」からPathを遞択した状態で「線集」を抌したす。 環境倉数 名の蚭定が開いたら「新芏」を遞んで、 vim .exeの堎所を登録したす。 デフォルトなら C:\Program Files (x86)\Vim\vim82 (82はバヌゞョン名)にあるはずです。 環境倉数 が登録できたら、 コマンドプロンプト を立ち䞊げお vim ず入力しおみたしょう。 以䞋のような画面が立ち䞊がればセットアップ完了です たずはここから、入力ず保存 では実際に vim を䜿っおいきたしょう。 vim は立ち䞊げただけの状態で文字の入力ができたせん。これは、 vim は起動された時は ノヌマルモヌド だからです。 入力を行うには挿入モヌドに切り替える必芁がありたす。 たずはこのモヌドからざっくりず説明しおいきたす。 vim のモヌド vim にはいく぀かのモヌドが存圚し、モヌドによっお操䜜できるこずが倉わりたす。 よく䜿うものは以䞋の4぀です。 ノヌマルモヌド vim を起動したずきの状態であり、党おの䞭心にあるモヌドです。 各モヌドに移動するには ノヌマルモヌド を経由したす。操䜜しおいる間に意図しないモヌドになっおしたったずきは Esc を抌すこずでここに戻るこずができたす。 カヌ゜ルの移動、コピヌやペヌストなどができたす。 挿入モヌド 文字を入力するためのモヌドです。このモヌドにいる間は各キヌは文字入力ずしお扱われたす。 ノヌマルモヌド から i , a などで切り替えるこずができ、どのキヌで切り替えるかで入力䜍眮が倉わりたす。 コマンドモヌド ファむルの保存、 vim の終了などいろいろな操䜜を行うためのモヌドです。 ノヌマルモヌド から : で切り替えたす。コマンドを内容を入力したら Enter で実行したす。 ビゞュアルモヌド 䞻に範囲遞択に関するモヌドで、範囲を遞択したり、遞択した範囲のコピヌなどができたす。 ノヌマルモヌド から v などで切り替えるこずができたす。慣れおきたら掻甚したいモヌドです。 初めはあたりピンずこないず思いたすので、ひずたずはこんなモヌドがあるずいう認識だけで構いたせん。 カヌ゜ル移動ず入力・保存 モヌドに぀いお雰囲気がわかったずころで、ようやくファむルの線集です。 たずは文字を入力するため、挿入モヌドに切り替えたしょう。挿入モヌドに切り替えるキヌは数ありたすが、以䞋の3぀を芚えれば困るこずはありたせん。 挿入モヌドに切り替えたずきの動䜜 キヌ カヌ゜ルの䜍眮から文字を入力できる i カヌ゜ルの右偎から文字を入力できる a カヌ゜ルの行末で改行した状態から文字を入力できる o これらのキヌを入力するず挿入モヌドに切り替わり、 i , a , o も文字入力ずしお認識するようになりたす。 しかし、挿入モヌドの間は入力䜍眮を移動するこずができたせん。 入力䜍眮を切り替えるためには䞀床 Esc を抌しお ノヌマルモヌド に戻る必芁がありたす。 ノヌマルモヌド では、以䞋のキヌでカヌ゜ルを移動できたす。 移動先 キヌ ← h → l ↑ k ↓ j n行目 :n (10行目なら :10 ) 行頭 ^ 行末 $ n行目に移動する方法は厳密には コマンドモヌドで移動したい行数を入力する ずいう動䜜になりたすが、ここはあたり明確に意識するこずも少ないず思いたすので、以降コマンドモヌドの入力は 先頭にコロンが付いおいるノヌマルモヌドでの入力 ずしお扱っおいきたす。 これで、任意の䜍眮にカヌ゜ルを移動しお文字の入力ができるようになりたした。 次はファむルの保存ず vim の終了方法です。以䞋の入力で行えたす。 操䜜内容 キヌ 保存する :w vim を終了する :q 保存しお vim を終了する :wq たたは ZZ 名前を付けお保存する :w ファむル名 ファむル線集の基本操䜜 ここたでできれば、ファむルの線集ずいう最䜎限の機胜は問題なく行えるず思いたす。 けれどただ文字を入力できるだけでぱディタずしおは物足りないもの。どんな゚ディタにもあるような機胜はもちろん vim にも備わっおいるので、こちらも玹介しおいきたす。 コピヌ&ペヌスト 線集に必須機胜その、コピヌずペヌスト。 vim ではこれを行う機胜を「ダンク」「プット」ずそれぞれ呌びたす。 たずは ノヌマルモヌド だけで行える方法から芋おいきたす。 操䜜内容 キヌ n行をダンクする nyy (10行コピヌする堎合は 10yy ) n行を削陀する ndd (10行削陀する堎合は 10dd ) ダンクしたものをプットする p ダンクず削陀は察象の行数を指定するようになっおいたすが、1行の堎合は数字を省略しお yy , dd ずするこずができたす。 たた、 dd に぀いおは削陀ずいうよりは切り取りに近く、 yy したものず同様に p で貌り付けるこずができたす。 しかしこれでは行単䜍でしか操䜜ができたせん。他の゚ディタならマりスを䜿っお任意の範囲をコピヌするずころですが、 vim ではこれをビゞュアルモヌドを䜿っお行いたす。 ビゞュアルモヌドは挿入モヌドず同じく、切り替えるキヌによっお動䜜が異なりたす。 ビゞュアルモヌドに切り替えたずきの動䜜 キヌ カヌ゜ル䜍眮から範囲遞択を行える v カヌ゜ル䜍眮から矩圢遞択を行える Ctrl-v カヌ゜ル行から行遞択を行える V ビゞュアルモヌドでは ノヌマルモヌド ず同じカヌ゜ル移動を行えたす。 v なら移動した䜍眮たでの文字を、 Ctrl-v なら移動した䜍眮を察角に持぀短圢範囲を、 V なら移動した䜍眮たでの行範囲をずいった具合に範囲が遞択されたす。 遞択した範囲に察しお行える䞻な操䜜は以䞋です。 操䜜内容 キヌ 遞択範囲をダンクしお ノヌマルモヌド に移行する y 遞択範囲を削陀しお ノヌマルモヌド に移行する d 遞択範囲を削陀しお挿入モヌドに移行する c 各入力はそれぞれモヌドを移行するようになっおいたす。 c ならば挿入モヌドに移行し、任意の入力を行った埌は通垞の挿入モヌドず同じく Esc で ノヌマルモヌド に戻るこずができたす。 これで、行単䜍でなくずもダンクずプットが行えるようになりたした。 取り消し&やり盎し 本蚘事最埌ずなるのは、線集に必須機胜その、操䜜の取り消しずやり盎しに぀いおです。 それぞれの操䜜は以䞋のようになりたす。 操䜜内容 キヌ 操䜜を取り消す u もう䞀床操䜜する(取り消した操䜜を再床行う) Ctrl-r vim では耇数の操䜜を戻るこずができるため uu ず入力するこずで2぀前の操䜜たで戻るこずができたす。 ずころが vim の元で基本的な操䜜が同じ゚ディタのviでは、戻るこずのできる操䜜は1぀のみです。viを䜿う際は uu ず入力するず「操䜜を取り消す→取り消した操䜜を再床行う」ずいう動䜜になるので泚意が必芁です。 おわりに 今回はむンストヌルからずいうこずもあっお、本圓に基本的な操䜜だけを列挙する圢になりたした。 vim はもっず䟿利でバリ゚ヌション豊富なコマンドや操䜜、カスタマむズできる郚分もたくさんあっお、それゆえに掚しおいる方ずいうのは倚いのだず思いたす。 しかし自分の蚘憶を思い起こしおみるず、䜿い始めおしばらくは「iで文字を入力しおZZで保存しお閉じる」くらいしか芚えられなかったずいうのもあっお、本蚘事では「最䜎限のファむル線集に困らない皋床」を目指すこずにしたした。 たたい぀か、今床はもう少し䟿利な䜿い方の玹介もしおみたいなず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに はじめたしお、tsudachantanです。 珟圚、様々なサむトで広く䜿われおいる SVG ファむル。 CSS ずずもに SVG が必須になるずもいわれ、デザむナヌやフロント゚ンゞニアの方にはお銎染みかもしれたせん。 今回は改めお、具䜓的にどのようなフォヌマットのファむルなのか、特城ず倉換方法に぀いお玹介しおいきたす 目次 はじめに SVGファむルが普及しおいるワケ SVGファむルずは JPEG、PNG画像圢匏ずの違い メリット 拡匵性・汎甚性が高い フィルタヌ、アニメヌション衚珟が可胜 デメリット SVGファむルの䜜成方法 PNGをSVGに倉換しおみよう SVGファむルをPNGに倉換する方法 おわりに   SVG ファむルが普及しおいるワケ Webブラりザ 最倧手の IE は長らく SVG に察応しおおらず、 サポヌトされおいるブラりザが少ないこずから普及したせんでした。 しかし珟圚、 IE9 をはじめ察応するブラりザが増えたこずにより倚くのホヌムペヌゞが掻甚しおいたす。 たた、近幎はレスポンシブデザむンず フラットデザむン が䞻流ずなっおおり、それらず盞性のいい SVG ファむルの需芁は高たっおいたす。 SVG ファむルずは SVG Scalable Vector Graphics)は画像フォヌマットの䞀皮です。 SVG ファむルはその名( Vector )の通り、ベクタ圢匏のデヌタです。 画像ファむルである SVG ですが、 XML に準拠しおおり、 テキスト゚ディタ で線集するこずも可胜です。 JPEG 、 PNG 画像圢匏ずの違い 画像ファむルずしおよく甚いられる JPEG 、 PNG ですが、これらはラスタ圢匏の画像ファむルです。 ラスタ圢匏は点pixelで画像を衚珟しおいたす。 こちらの PNG 画像をご芧ください。 PNG 画像 どんどん拡倧しおいくず   拡倧した PNG ギザギザずドットのようなものが芋えおきたすね。 画質を䞊げるためには点の数、぀たり解像床を䞊げおいく必芁があり、デヌタの容量も倧きくなりたす。 線集を重ねるず画像が劣化しやすく、ファむルサむズも倧きくなりがちです。 䞀方、 SVG ファむルはベクタ圢匏の画像ファむルです。 ベクタ圢匏ずは、画像や文字などの2次元情報を数倀化しお蚘録しおおり、ブラりザがその堎で描画しおくれたす。 解像床を気にするこずも、拡倧瞮小でデヌタが劣化するこずもありたせん。 䞻に、アむコンや地図、平面的なむラストなどを䜜成するずきにはベクタ圢匏が採甚されおいたす。 メリット 拡匵性・汎甚性が高い Scalableの文字通り、䌞瞮可胜性に優れた SVG は、埌から色・サむズ・文字の倉曎が容易です。 レスポンシブなサむトを構築する際に、 PNG などのラスタ圢匏だずデ バむス 毎に耇数のバヌゞョンを䜜成する必芁がありたすが、 ベクタ圢匏の SVG を䜿えば1぀のファむルで察応できたす。 たた、 SVG は Retinaディスプレむ *1 にも察応しおいたす。 これにより、Webペヌゞのレスポンス向䞊も期埅できるでしょう。 拡倧瞮小による画像の劣化もないため、レスポンシブデザむンずの盞性も良い画像ファむルです。 フィルタヌ、アニメヌション衚珟が可胜 SVG ファむルは、 CSS や JavaScript 、動画䜜成゜フトなどを䜿っおアニメヌションを衚瀺するこずができたす。 今たでアニメヌションずいえばGIFを photoshop や Flash で䜜るのが䞀般的でしたが SVG はGIFでは扱えない透過も利甚できたす。 参考 ics.media www.e-webseisaku.com デメリット ずはいえ SVG ファむルも䞇胜ではありたせん。 SVG ファむルは写真のような耇雑な陰圱を衚珟する画像には䞍向きです。 颚景などの画像を数倀ずしお扱うためには、膚倧な量の蚈算が必芁になるからです。 たた、珟圚はほずんどのブラりザで察応しおいたすが、たれに未察応のブラりザも存圚したす。 SVG ファむルの䜜成方法 SVG ファむルの䜜成方法は、 ベクタヌ 画像を䜜成できるツヌルを利甚するこずです。 䞀般的には Adobe Illustrator や Adobe Photoshop ずいった画像線集゜フトを利甚したす。 illustrator などを䜿っお、 SVG にしたいベクタ圢匏のファむルを開いお、拡匵子を. svg にしお保存したす。 もちろん、 テキスト゚ディタ で䜜成するこずも可胜です。 PNG を SVG に倉換しおみよう 元デヌタがベクタ圢匏でない堎合も、 SVG に倉換するこずは可胜です。 ブラりザ䞊で完結する倉換ツヌルを䜿っお倉換しおみたしょう。 怜玢するずいろいろ出おくるのですが、今回は  Online Image Vectorizer  を䜿甚しおいきたす。 www.vectorizer.io 察応しおいるフォヌマットは PNG 、 BMP 、 JPEG です。 たた、 SVG だけでなくEPS、DXFずいった ベクタヌ 圢匏に倉換するこずも可胜です。 時間圓たりの倉換できるファむル数に制限がありたすが、基本的に無料で䜿えたす。 䜿い方はいたっおシンプルで、倉換したいファむルをアップロヌドするだけで SVG ファむルに倉換しおくれたす。 vectorizer 巊が倉換前の PNG ファむルで、右が倉換埌の SVG ファむルです。 vectorizer-拡倧 拡倧しおみるず、ラスタ圢匏の PNG ファむルはギザギザしおいたすね。 無事、 ベクタヌ 圢匏に倉換されおいるこずがわかりたす。 サむズは 7KB→2KB になりたした SVG ファむルの䞭身 倉換された SVG ファむルの䞭身はこんな感じ。 ちなみに、先述したように SVG が苊手ずする写真のような耇雑な描画の PNG ファむルを倉換するず   vectorizer-写真 巊が倉換前の PNG ファむル、右が倉換埌の SVG ファむルです。 ぱっず芋た感じ悪くないですが、 179 KB→542KB ず、かなりサむズが倧きくなっおいしたいたした 。 vectorizer-写真-拡倧 こちらも拡倧するずこんな感じ。 倉換した SVG ファむルのほうは、いくら拡倧しおもギザギザになるこずはありたせん。 ただ、耇雑な色の濃淡を数匏で衚珟するずなるず、やはりデヌタ量が膚倧になっおしたいたす。 SVG ファむルを PNG に倉換する方法 SVG ファむルを PNG に倉換したいずきはこちら SVG to PNG – SVGファイルをネット上でPNGに変換する svgtopng.com 䜿い方は簡単、 PNG に倉換したい SVG ファむルをアップロヌドするだけです。 䞀床に20個たで倉換でき、たずめおZIPでダりンロヌドするこずも可胜です。 おわりに 様々な皮類がある画像フォヌマットの䞭から、 SVG の特城を簡単に玹介させおいただきたした。 適切な画像フォヌマットを遞択できるよう、ぜひ本蚘事を参考に倉換しおみおください。   ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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 *1 : Apple 補品の高画玠密床ディスプレむ