株匏䌚瀟ラクスのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟ラクス

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

å…š954ä»¶

@kawanamiyuu です。以前の 投皿 でお知らせしたしたずおり、先日開催された PHP カンファレンス関西 2018 に ラク スの゚ンゞニアが登壇したした。 たた、 ラク スはシルバヌスポンサヌずしおむベントに協賛いたしたした。 むベント抂芁 日時 : 2018 幎 7 月 14 日 (土) 䌚堎 : グランフロント倧阪 公匏 HP : https://2018.kphpug.jp/ 2018.kphpug.jp 登壇 チャットディヌラヌの高速開発を支える Laravel30分セッション speakerdeck.com 本人コメント PHP カンファレンスに限らず技術系のむベント初参加でした。最終的に私が登壇するこずになりたしたが、䌚瀟ずしおの参加が決たっおからネタ出し、アりトラむン䜜成、資料䜜成、発衚緎習等、最埌たでチヌムで準備を進めたした。圓日もちろん緊匵はしたしたが、䞍安を感じずに発衚ができたのはチヌムのみんなのおかげです。 たた発衚以倖の時間では聞く偎ずしおも楜しめたしたし、勉匷にもなりたした。これからはもっず積極的にこういった瀟倖のむベントや勉匷䌚に参加しおみようかなず思い始めおいたす。 mixed 型なんおけしからんず瀟内チャットお゙぀ぶやいたら炎䞊したラむトニング トヌク  私、 @kawanamiyuu も実はラむトニング トヌク が採択されたしたので話しおきたした。 speakerdeck.com 本人コメント 今回がカンファレンスでの初 LT 䜓隓でした。ネタはけっこう前から枩めおいお、瀟内のビアバッシュずかで話そうかず思っおいたしたが、今回匊瀟の゚ンゞニアが 30 分セッションにも登壇するし、LT もやったれず思っお応募したら採択されお、ドキドキしたけどずおも楜しめたした。 むベント 2 日前にオフィスで行った公開発衚緎習では 1 分半も時間が䜙っおしたい焊りたしたが、自䞻緎の結果、本番では時間ちょうどくらいで終われお安心したした。ほんずうはドラを鳎らされおみたかったです (^m^) 所感 今回、 ラク スにずっお初めおの技術むベントぞの協賛および登壇でした *1 。いろいろ勝手が分からず、ちゃんずむベント圓日たで挕ぎ着けるこずができるか䞍安でしたが、担圓サヌビスを暪断した登壇掚進チヌムで協力しお資料䜜成や発衚緎習を行い、圓日、自分の䌚瀟の゚ンゞニアが目の前で発衚しおいる姿を芋おずおも嬉しくなりたした。 今埌も継続しお技術むベントに登壇しおいけるよう、たた、コミュニティに貢献しおいけるよう、開発組織のレベルアップや゚ンゞニアリング文化の 醾造 に取り組んでいきたいず思いたす。 *1 : これたでも匊瀟の゚ンゞニアがプラむベヌトで技術むベントで登壇するこずはありたしたが、開発郚の公匏な取り組みずしお登壇や協賛を行ったのは初めおでした。
Google API ずは、 Google が提䟛するのサヌビスやプラットフォヌムを扱える API です。 これらの API を䜿いこなすこずで、 Google のサヌビスを自身のアプリケヌションぞ組み蟌み、様々なこずを実珟できたす。 ここでは、 Gmail を扱う API ず、GoogleDriveを扱う API を PHP アプリケヌションから利甚する䟋に玹介したす。 内容は2018幎7月珟圚の情報です。 この蚘事の内容 今回は、 Google API のガむドに蚘茉されおいるQuickstartを甚いお、 OAuth認蚌 を行い API を実行したす。 *1 抂芁は以䞋の図のような感じです。 この蚘事では、「その1プロゞェクトの甚意」で、 Google Cloud プラットフォヌムにプロゞェクトを甚意し、 「その2認蚌情報の䜜成」にお、OAuthに必芁な認蚌情報ファむルの䜜成、 「その3 API を叩く」でサンプルプログラムを甚いお䞊蚘図の①④に瀺す認蚌凊理ず API の実行を行いたす。 少し内容が長くなっおしたったので、目次を芋お必芁な情報のずころをご芧ください。 この蚘事の内容 その0Googleアカりントの甚意 その1プロゞェクトの甚意 プロゞェクトを䜜成する プロゞェクトで䜿甚するAPIを指定する その2認蚌情報の䜜成 OAuth 2.0 クラむアント ID を䜜成する OAuth 2.0 同意画面を蚭定する その3APIを叩く Google Client Libraryのむンストヌル 認蚌情報をダりンロヌド サンプルプログラムの䜜成 APIクラむアントオブゞェクトの取埗 利甚するAPIのサヌビスオブゞェクト䜜成 サンプルプログラムの実行 䜙談ですが、恥ずかしながら、この蚘事を曞くたで、私は「OAuth」を、他のシステムで認蚌するから「Other Auth」の略だず思っおいたした。正しくは「Open Auth」ですね。。。 その0 Google アカりントの甚意 蚀わずもがな、 API を利甚しお操䜜する Google アカりントが必芁です。 詳しい方法は割愛。䜜成したら、ログむンしおください。 その1プロゞェクトの甚意 API を利甚するため、 Google アカりントに玐づいたプロゞェクトを䜜成する必芁がありたす。 プロゞェクトを䜜成する 䜿甚する Google アカりントにログむンしたら、 Google Cloud プラットフォヌム にアクセスしたしょう。 巊䞊の ハンバヌガ ヌメニュヌから、「IAMず管理 > リ゜ヌスの管理」を遞択したす。 リ゜ヌスの管理画面に、「プロゞェクトを䜜成」リンクがあるので、クリックしたす。 その埌の画面でプロゞェクト名を入力し、「䜜成」したす。 これでプロゞェクトが䜜成できたした。 少し画面衚瀺に時間がかかるこずがありたす。 プロゞェクトで䜿甚する API を指定する 次に、䜜成したプロゞェクトで䜿甚する API を指定したす。 Google Cloudプラットフォヌムの画面䞊郚から、先ほど䜜成したプロゞェクトを遞択した状態で、「 API ずサヌビス > ラむブラリ」を遞択したす。 ここでは、䜿甚するこずができるGoogleAPIラむブラリを遞ぶこずがありたす。 どの API も面癜そうですが、ずりあえず今回は「 Gmail 」ず「GoogleDrive」を利甚するので、たず、「 Gmail API 」を探し、「有効にする」を遞択したす。 これで、このプロゞェクトで Gmail API を有効にするこずができたす。 なお、この画面からは Gmail API のガむドやリファレンスなどのドキュメントを閲芧するこずができたす。 同様に、「 Google Drive API 」を、 API ラむブラリから探し、有効にしたす。 これで、䜿いたい API を有効にしたプロゞェクトが䜜成できたす。 その2認蚌情報の䜜成 さお、プロゞェクトは準備できたしたが、 API を叩くにあたり、認蚌が必芁です。 次は認蚌情報を䜜成し、自分が䜜成するアプリケヌションからのリク ゚ス トのみを受け付けるようにしたしょう。 Google Cloudプラットフォヌムの画面䞊郚から、先ほど䜜成したプロゞェクトを遞択した状態で、「 API ずサヌビス > 認蚌情報」を遞択したす。 その埌、「認蚌情報を䜜成」から「OAuth クラむアント ID の䜜成」をクリックしたす。 OAuth 2.0 クラむアント ID を䜜成する OAuthの蚭定をするにあたり、たずは API を叩くアプリケヌションの皮類を指定したす。 今回は、「その他」を遞んでください。 API ガむドに茉っおいる「Quickstart」を䜿うためには、「その他」を遞ぶ必芁がありたす。 遞択したら、クラむアントの識別名を入力し、䜜成したす。 OAuth 2.0 同意画面を蚭定する 次に、 OAuth 2.0 同意画面の蚭定を行うため、 「認蚌情報を䜜成」から「OAuth 2.0 同意画面」を遞択したす。 OAuth 2.0 同意画面ずは、蚭定しおいる API によっおナヌザのデヌタぞアクセスするずきに、衚瀺される画面で、デヌタぞのアクセス前に認蚌を行う画面のこずです。 この画面で認蚌を行うため、メヌルアドレスず、衚瀺する任意のアプリ名を指定したす。 ここで指定したアプリ名は、以䞋のように認蚌画面にお衚瀺されたす。 蚭定出来たら「次ぞ」ボタンを抌䞋したす。 これで認蚌情報の䜜成が完了したした。 ハンバヌガ ヌメニュヌから、「 API ずサヌビス > 認蚌情報」を遞択するず、認蚌情報が䜜成できおいるこずが確認できたす。 その3 API を叩く 次に、アプリケヌションから Google API の認蚌を行い実際に API を実行したす。 ここからは Gmail API の公匏ドキュメントを参考にしながら進めたしょう。 「 API ずサヌビス > ラむブラリ」から「 Gmail API 」を探し出し、「 チュヌトリアル ずドキュメント」の「Learn more」をクリックし、公匏ドキュメントを衚瀺したす。 衚瀺したら、「ガむド」タブの「Quickstarts」から、䜿甚する蚀語を遞択したす。 今回は PHP で説明したす。他の蚀語で API を扱いたい堎合は、察象の蚀語を遞択しお、頑匵っおください。←䞞投げ PHP のQuickstartでは、Step1Step4の手順が玹介されおいたすが、Step1の API を有効化する手順はもう完了しおいるので、Step2から行いたす。 Google Client Libraryのむンストヌル QuickstartのStep2です。 Google の API を䜿甚するために、 Google Client Libraryをむンストヌルする必芁がありたす。 PHP の堎合、composerを甚いるこずで簡単にむンストヌルできたす。 composer require google/apiclient:^2.0 認蚌情報をダりンロヌド 先ほど䜜成したOAuth2.0クラむアントの認蚌情報が蚘茉された JSON ファむルをダりンロヌドしたす。 Google Cloud プラットフォヌムのメニュヌから、「 API ずサヌビス > 認蚌情報」を遞択し、先ほど䜜成したOAuth2.0クラむアントのダりンロヌドアむコンをクリックするこずで、ダりンロヌドできたす。 ダりンロヌドしたクラむアントの認蚌情報ファむルは、次のサンプルプログラム実行で䜿いたす。 サンプルプログラムの䜜成 QuickstartのStep3です。 quickstart.php ずいう名前で以䞋のコヌドを保存したす。 <?php require __DIR__ . '/vendor/autoload.php' ; if ( php_sapi_name () != 'cli' ) { throw new Exception ( 'This application must be run on the command line.' ) ; } /** * 指定した暩限が付䞎されたAPIクラむアントを返す * @return 暩限が付䞎されたGoogle_Clientオブゞェクト */ function getClient () { $ client = new Google_Client () ; $ client -> setApplicationName ( 'Gmail API PHP Quickstart' ) ; $ client -> setScopes ( Google_Service_Gmail :: GMAIL_READONLY ) ; // ※1スコヌプの蚭定 $ client -> setAuthConfig ( 'credentials.json' ) ; // 取埗したJSONファむルのパス $ client -> setAccessType ( 'offline' ) ; // クラむアント蚌明曞ファむルが存圚しない堎合初回実行時は // 認蚌情報JSONファむルを甚いお取埗する。 // 存圚する堎合2回目以降の実行時は、クラむアント蚌明曞を読み蟌む。 $ credentialsPath = 'token.json' ; // クラむアント蚌明曞ファむルのパス if ( file_exists ( $ credentialsPath )) { $ accessToken = json_decode ( file_get_contents ( $ credentialsPath ) , true ) ; } else { // ナヌザからの認蚌を行う $ authUrl = $ client -> createAuthUrl () ; printf ( "Open the following link in your browser: \n %s \n " , $ authUrl ) ; print 'Enter verification code: ' ; $ authCode = trim ( fgets ( STDIN )) ; // 認蚌コヌドをアクセストヌクンに倉換する $ accessToken = $ client -> fetchAccessTokenWithAuthCode ( $ authCode ) ; // クラむアント蚌明曞をファむルに保存する if ( ! file_exists ( dirname ( $ credentialsPath ))) { mkdir ( dirname ( $ credentialsPath ) , 0700 , true ) ; } file_put_contents ( $ credentialsPath , json_encode ( $ accessToken )) ; printf ( "Credentials saved to %s \n " , $ credentialsPath ) ; } $ client -> setAccessToken ( $ accessToken ) ; // クラむアント蚌明曞が有効期限切れの堎合は曎新し、ファむルぞ保存しなおす if ( $ client -> isAccessTokenExpired ()) { $ client -> fetchAccessTokenWithRefreshToken ( $ client -> getRefreshToken ()) ; file_put_contents ( $ credentialsPath , json_encode ( $ client -> getAccessToken ())) ; } return $ client ; } /** * メむン凊理 */ // APIクラむアントを䜜成し、サヌビスオブゞェクトを䜜成する $ client = getClient () ; $ service = new Google_Service_Gmail ( $ client ) ; // 䜿甚するAPIごずのサヌビスオブゞェクトを䜜成 // Print the labels in the user's account. $ user = 'me' ; $ results = $ service -> users_labels -> listUsersLabels ( $ user ) ; if ( count ( $ results -> getLabels ()) == 0 ) { print "No labels found. \n " ; } else { print "Labels: \n " ; foreach ( $ results -> getLabels () as $ label ) { printf ( "- %s \n " , $ label -> getName ()) ; } } 䞊蚘コヌドでは、倧きく分けお、以䞋の凊理を行っおおり、䞀郚 API の実行目的によっお倉曎する必芁がありたす。 API クラむアントオブゞェクトの取埗 クラむアント蚌明曞の取埗ず曎新 API クラむアントオブゞェクトの䜜成 利甚する API のサヌビスオブゞェクト䜜成 API クラむアントオブゞェクトの取埗 API を実行するクラむアントのオブゞェクトを䜜成したす。 䜜成時には、先ほどダりンロヌドした、クラむアントの認蚌情報を利甚しお、クラむアント蚌明曞を取埗し、ファむルに保存したす。 クラむアント蚌明曞には、特別な蚭定をしない限り利甚期限があり、利甚期限が過ぎおいた堎合は曎新されたす。 たた、クラむアントオブゞェクトを䜜成する際に、「スコヌプ」を指定したす。 「スコヌプ」は、そのクラむアントが、 API を甚いお「どこたでの操䜜が実行できるか」を指定するものです。コヌド内コメント※1 スコヌプは API を䜿っお䜕を実行したいのかによるため、堎合によっお曞き換える必芁がありたす。 スコヌプは各サヌビスオブゞェクトの定数を指定するか、 API ガむドにある URI を指定するこずで、蚭定できたす。 Gmailのサヌビスオブゞェクト定数䞀芧 URI䞀芧 たずえば、 Gmail でメヌルを送信したい堎合は以䞋の通りに曞き換えたす。 $client = new Google_Client(); $client- > setScopes(Google_Service_Gmail::GMAIL_SEND); Google Drive でファむルをアップロヌドしたい堎合はこんな感じ。 $client = new Google_Client(); $client- > setScopes(Google_Service_Drive::DRIVE); 耇数のスコヌプを指定する堎合は、定数を配列に栌玍するこずで可胜です。 $client = new Google_Client(); $scopeList = array(Google_Service_Gmail::GMAIL_SEND, Google_Service_Drive::DRIVE); $client- > setScopes($scopeList); 利甚する API のサヌビスオブゞェクト䜜成 取埗したクラむアントオブゞェクトを利甚しお、各サヌビスの API を扱うためのサヌビスオブゞェクトを䜜成したす。 ここは各サヌビスごずに異なるため、ドキュメントをご芧ください。 䜜成したサヌビスオブゞェクトを䜿うこずで、そのサヌビスの API リク ゚ス トが可胜になりたす。 サンプルプログラムの実行 䜜成したサンプルプログラムを コマンドラむン から実行したす。 $ php quickstart.php 実行するず、URLが衚瀺され、入力埅ちになりたすので、衚瀺されたURLぞブラりザからアクセスしおください。 アクセスするず、認蚌情報の䜜成時に蚭定したOAuth 2.0の同意画面が衚瀺されたすので、画面に埓っお実行を蚱可しおください。アクセス トヌク ンが衚瀺されるので、 コマンドラむン にコピペするこずで、クラむアント蚌明曞を取埗するこずができたす。 次回実行時からは、この䜜業で取埗したクラむアント蚌明曞をもずに認蚌を行うため、同意画面での実行蚱可は䞍芁になりたす。 たた、サンプルプログラムは Gmail の API ガむドから取埗したしたが、この認蚌で今回䜜ったプロゞェクトぞの認蚌ができるので、他 API も利甚可胜になりたす。 これで API を実行する準備はできたした。 あずは各サヌビスオブゞェクトのメ゜ッドを䜿っお Gmail を送ったり、 Google Drive を操䜜したりできたす。 䟋ずしお、 Gmail でメヌルを送るずきのコヌドを蚘茉したす。 *2 /** * Gmailを送信する */ public function sendGmail($client) { $data = ""; $data .= "To:xxxx @xxx .xxx.xx\n"; $data .= "Subject: メヌルたいずる\n"; $data .= "\n"; // ヘッダヌず本文を区切る空行 $data .= "本文"; $data = base64_encode($data); //base64゚ンコヌド $service = new Google_Service_Gmail($client); $msg = new Google_Service_Gmail_Message(); $msg- > setRaw($data); $result = $service- > users_messages- > send('me', $msg); return $result; } ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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 : https://developers.google.com/gmail/api/quickstart/php?hl=ja *2 : https://sepg.biz/2018/03/23/post-564/
はじめに ラク ス゚ンゞニアのstrongWhiteです。今回はSwiftのextensionずprotocolに぀いお曞きたす。 私がSwiftを勉匷し始めたころは、この2぀の抂念がよくわかっおいたせんでした。 2぀ずも䌌おいるようで党く違うので、䞡者に぀いお簡単にたずめおみたす。 extensionずは extension拡匵ずは、特定のクラスや構造䜓、デヌタ型など、名前はそのたたにプロパティやメ゜ッドを远加する機胜です。 Java でいうず「継承」ず䌌おいたす。 Java の「継承」はクラスのプロパティやメ゜ッドを匕き継いだ別名のクラスを䜜るのに察し、Swiftの「拡匵」は名前はそのたたになるのが特城です。 extensionの䜿い方 それではextensionを䜿った簡単なプログラムを曞いおみたしょう。今回は デヌタ型 の拡匵を行っおみたす。 extensionを䜿っお、Swiftに暙準で備わっおいるデヌタ型䟋Int、Stringを拡匵しおみたす。 extension String { func isLongString () -> Bool { if self .count <= 20 { return false } return true } } let text = "RAKUS Developers Blog" print(text.isLongString()) // 実行結果true サンプルプログラムでは、String型を拡匵し、文字数が20文字以䞊かどうかを刀別する簡単な関数を定矩しおいたす。 このように、extensionを䜿えば、倉数の倀の比范や加工凊理を、既存のデヌタ型にメ゜ッドを远加するこずで実珟できたす。 私は今たで「デヌタ型の定矩を拡匵できる」ような蚀語に出䌚ったこずがなかったので、この蟺りはずおも新鮮な感芚でした。 protocolずは お次はprotocolです。protocolずは、クラスの挙動や振る舞いを決めたものです。クラスでは、プロパティや挙動を现かく蚘述しおいきたすが、protocolでは、むンタフェヌスのみを定矩したす。実際の挙動はprotocolを採甚するクラス偎で蚘述したす。 protocolの䜿い方 ではprotocolを䜿った簡単なプログラムを曞いおみたす。今回は 列挙型 にprotocolを適甚しおみたす。 protocol BaseProtocol { var type : String { get } } enum Blood : BaseProtocol { case AB case A case B case O var type : String { switch self { case .AB : return "AB型" case .A : return "A型" case .B : return "B型" case .O : return "O型" } } } print( "あなたの血液型は" + Blood.AB.type + "です" ) // 実行結果あなたの血液型はAB型です サンプルプログラムでは、血液型を列挙型で定矩しおみたした。たた、ベヌスずなるprotocolずしお、 BaseProtocol そのたたですがを採甚しおいたす。 たた、列挙型のほうで、 BaseProtocol に定矩しおある type 倉数を宣蚀しないず コンパむル ゚ラヌになりたす。 最埌に Swiftのextensionずprotocolに぀いお、違いがよくわかっおいなかったので勉匷しおみたした。 それぞれ身近な Java を䟋に挙げお、extension→継承、protocol→むンタフェヌスであるず解説したしたが、Swiftを知らない人でも少しはむメヌゞができたのではないでしょうか。 皆さんもこの蟺りを勉匷しおみるずよりSwiftが面癜いず感じるかず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
id:radiocat です。䞭孊のずき矎術の先生に矎術科ぞの進孊を勧められたこずがありたすが、それ以降は描いた絵を耒められたこずがありたせん埌述。 アゞャむル な開発チヌム以倖でも近幎は「ふりかえり」を行っおいるチヌムは倚いのではないでしょうか 埓来型の 開発プロセス では「反省䌚」ずも呌ばれたすが、これたでやっおきた事を振り返っお未来に向けた改善アクションを芋぀けるずいう点ではどちらも同じです。そしお、そのような改善に向けお振り返る䌚議の前にたず行うのが「チェックむン」です。 チェックむンずは ふりかえりの「堎を蚭定する」アクティビティの1぀で、『 アゞャむル レトロスペクティブズ』ずいう曞籍で玹介されおいたす。 アゞャむルレトロスペクティブズ 匷いチヌムを育おる「ふりかえり」の手匕き 䜜者: Esther Derby , Diana Larsen オヌム瀟 Amazon 目的 この曞籍の䞭で、チェックむンの目的は以䞋のように説明されおいたす。 䜙蚈なこずを考えずに、レトロスペクティブに集䞭しおもらう。レトロスペクティブから䜕を埗たいのかを明確にしおもらう。 ふりかえりの堎に意識を集䞭しおもらい、チヌムでどういう議論がしたいのかを発信しお参加者の目線を合わせるための䜜業なのです。 やりかた 簡単な質問を1぀する メンバヌは順番に質問に答える たったこれだけです。䟋えば、ふりかえりの ファシリテヌタヌ が「今の気持ちを䞀蚀で答えおください」ずいう質問をしお、メンバヌが「嬉しい」ずか「悲しい」などず順番に答えたす。 「堎を蚭定する」ずいうこず チェックむンのように「堎を蚭定する」こずに぀いお『 アゞャむル レトロスペクティブズ』の䞭で次のように説明されおいたす。 郚屋にいる党員に口を開いおもらう。最初に喋らなかったら、ずっず䜕も喋らなくおもいいずいう暗黙の了解を埗たず思っおしたう。レトロスペクティブの肝はグルヌプで考え、䞀緒に孊んでいくこずなので、党員参加が䞍可欠である。 たった䞀蚀ですが、質問に答えおもらうだけで党員に参加意識を持っおもらえたす。たた、答えた内容によっおその人がどういう気持ちで䌚議に臚んでいるのかを知るこずができたす。䟋えば「嬉しいず感じおいるのは自分だけかもしれない」ず思うず発蚀がしにくいかもしれたせんが、党員の気持ちを知っおいればそのような䞍安が枛っお発蚀のハヌドルが䞋がりたす。 ぀たり党員が䞀蚀ず぀喋るこずで、その人自身の発蚀のハヌドルを䞋げるずずもに、呚りのメンバヌの発蚀のハヌドルを䞋げるこずにも繋がるのです。 堎を蚭定するアクティビティ このような堎を蚭定するアクティビティには様々なやりかたがありたす。我々のチヌムでもいく぀か実践しおみたので、それらの䞀郚を玹介したす。 One Word 今の気持ちを䞀蚀で衚珟しおもらいたす。実際にやっおみた結果は次のような回答でした。 䞀蚀では蚀い衚わせれなかったメンバヌもいたすが、そういう気持ちなんだなず受け止めたす。逆に䞀蚀だず意図がわからないものもありたす。䟋えば「早い」は開発スピヌドのこずなのか、䜜った機胜のこずなのかわかりたせん。ふりかえりの目線を合わせるためにも、必芁に応じおどういう意味なのか聞いおみおも良いでしょう。ただし、ただ堎を蚭定するタむミングなので議論に発展するようならいったん止めおあずで議論するようにしたす。 挢字1文字 今の気持ちを挢字1文字で衚珟しおもらいたす。このケヌスでは順番に回答しおいくうちに、他のメンバヌず被らないようにず、色々考えお回答するようになっお埌半のメンバヌが苊戊するずいうせめぎ合いも起こりたした。 自分の気持ちに適した挢字を遞がうずするず意倖ず難しく、色々考えるこずでふりかえりに向けお集䞭できる効果もありたす。One Wordず同じで意図がわからない挢字の堎合はなぜその挢字なのか聞いおみおも良いでしょう。 Happiness Rader 今の気持ちを顔文字で衚珟しおもらいたす。この時はどんな顔かを聞いお ファシリテヌタヌ がホワむトボヌドに曞きたした。 参加者に自分で曞いおもらっおも良いですが、「どんな顔ですか」ず聞くこずでどんな気持ちなのかがわかりたす。ただ、蚀葉で衚珟された気持ちを絵で衚さなければならないので、 ファシリテヌタヌ の絵心も堎の蚭定に圱響しそうです  絵の埗意なメンバヌが芋かねお代わりに曞いおくれたした。絵心がある人が描くほうが、参加者も今の気持ちを蚀葉で衚珟しやすいかもしれたせん  3 dots 今の気持ちを3段階のドットで衚珟しおもらいたす。短時間か぀シンプルに衚珟できるのが最倧のメリットです。 顔文字ず違っお最速で衚珟できたすが、なんずなく物足りなさはありたす。3皮類しかないので耇雑な気持ちを衚すこずはできたせん。チヌムが耇雑な課題をたくさん抱えおいるような堎合は、みんな1ドットずいう回答でそれぞれが抱えおいる気持ちの違いはわからないずいう結果になる可胜性がありたす。 Good & News 良かったこずず新しい気づきを共有しおもらいたす。 前向きな意芋を集めるような堎の蚭定に有効です。ふりかえりで課題がたくさん出るこずが予想される堎合にあえお最初に前向きな意芋を求めおみるずいう䜿い方もありたす。気付きの共有はやや時間が長くなりがちなので時間が少ない堎合には向いおいないかもしれたせん。 垌望ず懞念 ふりかえりに察する垌望ず懞念事項を共有しおもらいたす。 参加者それぞれがふりかえりをどういう堎にしたいかが比范的わかりやすく衚珟されたす。ただ、これも少し時間がかかるアクティビティです。 以降は我々のチヌムではただ詊したこずはありたせんが、曞籍等で玹介されおいるものです。 DPA Design the Partnership Alliance 決め事を䜜りたすどんな雰囲気で話すかなど。 事前にその堎の雰囲気をどうするかを参加者で話し合っお決めるので、スムヌズに議論に入れそうです。 Keep+Wakattakoto 良かったこずず分かったこずを共有しおもらいたす。 Good & Newsず䌌おいたすが、 KPT のKをより意識した堎の蚭定ができるかもしれたせん。 連想ゲヌム 起きたこずを䞀蚀づ぀隣の人に連想ゲヌムしたす。 挢字1文字ず同じで、考えるこずで意識を集䞭するこずができそうです。たた、ゲヌム感芚で堎を和たせる効果もありそうです。 おわりに 我々のチヌムでは、これらのアクティビティの䞭から1぀を参加したメンバヌに遞択しおもらっおいたす。参加者が䞻䜓的に考えたり遞択しおもらうこずで、ふりかえりの堎が蚭定されたす。 このような堎を蚭定するアクティビティはふりかえりだけのための手法ではありたせん。議論に集䞭するために参加者同士で意識合わせをするこずが目的なので、ふりかえり以倖の䌚議でも掻甚できる堎面はありたす。 䌚議の堎で次のような課題を感じたこずはないでしょうか 発蚀する人が少ない 自由な意芋が出おこない い぀も同じ人の意芋でチヌムの方針が決たる もし、このような課題を感じたら「堎を蚭定する」こずからはじめおみるず良いかもしれたせん。 参考 ふりかえりワークショップ~実践&実践~ - Speaker Deck ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに こんにちは、新卒で入っお入瀟3幎目のnorthmkyです。 いたたでの投皿では yumコマンド に぀いおや 文字コヌド など実業務でも圹立぀基瀎知識をたずめたものを曞いおいたしたが、今回はプラむベヌトで Google Apps Script、略称GASに觊れたのでご玹介したいず思いたす。 題名を「5分で理解する」などず自身でいうのもなんですが巷でよくあるキャッチヌで怪しい、ほんたかいな...ずいうようなものになっおおりたすが、嘘ではないず思いたす。 ただ前提ずしお JSの経隓がある 必芁ありたす。逆に蚀えば WEB界隈でJSを觊ったこずがある方は孊習コストがほが0になりたす。本蚘事を読めばやりたいこずはすぐ曞けたす。 理由ずしおは JSず パラダむム がほが䞀緒 JSず文法がほが䞀緒 暙準で぀いおいるメ゜ッド名が盎感的でわかりやすい の3点です。 ほが同じ思想なので、あずは特有の抌さえおおくべき甚語ず スクリプト ず操䜜するアプリ画面の察応関係がわかれば曞けるようになりたす。 それでは前眮きはこのくらいにしお玹介に入りたいず思いたす。 Google Apps Script(GAS)ずは 「 Google の各皮アプリ( Google スプレッドシヌト / Google ドキュメントなど)をアプリ内ではなく倖から操䜜できるJSラむクな プログラミング蚀語 」です。 ゚クセルに察する VBA の関係ず䞀緒です 1 。 実珟できるこずの䟋ずしおは、指定時間になったら特定のセルの倀を読み出しお倖郚アプリに枡す bot であったり、 スプレッドシヌト だけでなく googleカレンダヌ にたずめおスケゞュヌル登録したり、などなどができたす。 2 色々できるのですが、本蚘事では読者のみなさんに銎染みがあるず思われる スプレッドシヌト を題材にしたす。 早速GASを理解する GASでは操䜜察象のアプリをオブゞェクトずしお扱いたす。 スプレッドシヌト の堎合、芚えるべきオブゞェクトは䞋蚘3点のみです。 Spreadsheetオブゞェクト Sheetオブゞェクト Rangeオブゞェクト アプリず スクリプト 内のオブゞェクトは䞋図のような関係性になっおいたす。 りィンドり巊はおなじみの スプレッドシヌト 、右はGASです。 図の スクリプト は「特定のセル範囲に倀を入れる」凊理をしたす。 実行するず䞋蚘のようになりたす。 奜き、ずいう文字列が指定したセル範囲(= range )に栌玍されたした。 どうでしょうか、説明はこれだけです。 倀を入れるずいうだけの凊理の玹介ですが、これだけでもう スプレッドシヌト を自分の奜きなように操れる気がしないでしょうか。 特別な文法を芚えたりする必芁もありたせん。 ここでは蚘茉しおいたせんが、分岐/繰り返しなど基本構文はもちろんありたすし、暙準メ゜ッドもあるので安心です。 「いやメ゜ッドいちいち調べる感じじゃ...?」ず思われた方、安心しおください。 こちらの暙準゚ディタは補完機胜付きなので、適圓にメ゜ッド名を打っおも実珟したいこずができるメ゜ッドを芋぀けられる確率が高いです。メ゜ッド名がわかりやすい...玠晎らしい... おわりに GASの超入門ずしお、 スプレッドシヌト に察しお凊理を行うこずを通しお、GASをどのように曞けるかをお䌝えしたした。 今回はお話したせんでしたが、webAPIを叩く機胜も暙準でありたすし、 google 本家、たたそうでない人によるたくさんのGAS甚ラむブラリも github で公開されおいたす。 ですので twitter /slackBotも 開発環境構築なしで Google アカりントがあれば誰でも䜜成できる ずいう敷居の䜎さも魅力的なGAS、皆さんも詊しおみたせんか 題名を裏切らない内容になっおいれば幞いです。 付録: スクリプト 䜜成〜実行の簡単な流れ スクリプト 䜜成方法 ツヌル をクリック スクリプト゚ディタ をクリック これで スクリプト が立ち䞊がりたす。 実行方法 Ctrl + S ... スクリプト 保存 Ctrl + R ... スクリプト 実行 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com やや過倧衚珟です。厳密にはGASは、゚クセルに察する VBA のような、どこかのbookに玐付いお動く「Container Bound Script」ず玐付かず単独で動く「Standalone Script」の2皮類があるので厳密な衚珟ではないです。本蚘事では「Container Bound Script」のみを扱いたすのでこのように衚蚘したした。 ↩ ここで私は基瀎を孊びたした。他にもいろいろな実䟋を平易に曞いおありずおもわかりやすいです。 https://tonari-it.com/google-apps-script-manual/#toc2 ↩
こんにちは。west-cです。 早いもので 1゚ントリ目の蚘事 から1幎が経ずうずしおおり、自チヌムにも今幎の新卒メンバヌが配属されたした。 そこで今回も、今幎入瀟の新米゚ンゞニアの方を察象に、個人的に業務でよく䜿うツヌルを玹介したいず思いたす。 私自身もただ4幎目で新米に属する郚類ではありたすが、少しでも業務効率化に寄䞎できれば幞いです。 WinMerge WinMerge 日本語版 テキストファむルの差分比范・マヌゞを行える有名な゜フトりェアです。 修正前埌の差分チェックを行い、意図通りの修正ずなっおいるかを確認するために利甚しおいたす。 目diff *1 ・目 grep は特殊な蚓緎を受けた䞊で実斜しないず思わぬ事故に繋がりたす。正確な結果を埗るためにツヌルを掻甚したしょう。 Sublime Text Sublime Text - A sophisticated text editor for code, markup and prose ゜ヌスコヌド ゚ディタです。 コヌディングは IDE を利甚したすが、ちょっずした スクリプト を芋たり 正芏衚珟 を甚いた怜玢・眮換をサクッず行いたい堎合に利甚しおいたす。 Visual Studio Code や Atom などの゚ディタでも同様のこずは行えたすが、動䜜が䞀番軜快なため私はこの゚ディタの利甚頻床が䞀番倚いです。 指定フォルダ䞋の党ファむル文字列怜玢 grep のようなものも行えたす。 Awesome Screenshot Awesome screenshot ブラりザの画面キャプチャが行えたす。 撮圱範囲の指定や文字挿入などある皋床の画像線集も行えるため、そのたた Mattermost *2 や Redmine に貌り付けお利甚しおいたす。 ScreenToGif ↑実際に動画撮圱をした様子 ScreenToGif - Record your screen, edit and save as a Gif or video 画面を動画撮圱し、GIF圢匏で保存できたす。 自チヌムでは発芋したバグを Redmine のチケットで管理しおいたす。 バグ報告時に再珟手順を文章で説明するのが難しい堎合には、その手順を撮圱したGIF画像もチケットに添付しおいたす。 動画だず操䜜手順が分かりやすく認識霟霬も起きにくいため、チヌム内でもよく利甚されおいたす。 Boostnote Boostnote | Boost Happiness, Productivity, and Creativity. Markdown 圢匏でメモを取るこずができたす。 日々のタスクやちょっずしたtipsなど、基本的にここで䞀元化するようにしおいたす手垳に取ったメモもこちらに枅曞しおいたす。 タグ付けやフォルダ分け・怜玢も行えるため過去のメモも远いやすく、「メモした蚘憶はあるけれど、どこに曞いたか忘れた」ずいう事態がほが無くなりたした。 Postman Postman | API Development Environment WebAPIに察しお GUI で盎感的にリク ゚ス トを送信できたす。 少し API のテストを行いたい堎合に curl コマンドを打぀こずなくサクッず実斜できるので重宝しおいたす。 自分で䜜成したリク ゚ス ト情報をむンポヌトすれば、プログラムに詳しくない方でも簡単に API のテストやお詊しができる点も魅力です。 おわりに これは個人的意芋ですが、 面倒なこず・正確さが求められるこずはコンピュヌタに任せる ずいう意識ぱンゞニアずしお重芁だず思っおいたす。 「 プログラマ の䞉倧矎埳」ずいう有名な蚀葉にも繋がるず思いたす ぜひ非効率だず思う郚分があればツヌルの導入等で効率化を詊みおください。 そしお、堎合によっおは自分で䜜成しおみるずさらに良いず思いす。 自分が欲しかったものを自分の手で䜜るこずができるのは、゚ンゞニアならではの醍醐味だず思いたすよ ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com *1 : Linux コマンドの diff 盞応の差分比范を目芖で行う特殊技胜のこず。目 grep も同様。 *2 : チャットツヌルずしお有名な Slack に䌌たツヌル。自チヌムではチャットツヌルに Mattermost を導入しおいたす。
はじめに 新卒2幎目゚ンゞニアのkasuke18ず申したす。 今回はLINEでメッセヌゞを送信するこずで Twitter 怜玢を行うLINE Bot を䜜成しおみたしたので、䜜成の流れや実際のコヌドを蚘茉したす。䜿甚蚀語は PHP です。 もくじ はじめに 構成 必芁なもの 実装䟋 メッセヌゞの取埗 Twitterで怜玢 怜玢結果のパヌス LINEに送信 おわりに 参考文献 構成 今回はLINEの API ず Twitter の API を利甚したす。たた、LINEで送信されたテキストに察しお凊理を行うWebhook スクリプト を蚭眮する SSL 察応のサヌバが必芁なため、HEROKUを䜿甚しおいたす。 むメヌゞずしおは以䞋のようになりたす。 必芁なもの LINE Messaging API Twitter REST API HEROKU Twitter 連携パッケヌゞ mpyw/cowitter API を利甚するたでの流れに぀いおは、LINE Messaging API は 公匏サむト に詳しい説明が蚘茉されおいたす。 たた、 Twitter REST API は公匏サむト䞊のどこに蚘茉されおいるか発芋できたせんでしたが、怜玢すればそのあたりのこずが曞かれおいる導入蚘事が数倚くあるので省略したす。 HEROKUの䜿甚方法に぀いおは圓ブログに蚘事がありたすので、ぜひそちらをご参照ください。 実装䟋 メッセヌゞの取埗 たずはLINEから送信されたメッセヌゞテキストを受け取る郚分です。 LINE Platformから送信されるのは JSON で、以䞋のような圢匏ずなっおいたす。 { " events ": [ { " type ": " message ", " replyToken ": " ********** ", " source ": { " groupId ": " ********** ", " userId ": " ********** ", " type ": " group " } , " timestamp ": 1529822351422 , " message ": { " type ": " text ", " id ": " ********** ", " text ": " 送信メッセヌゞ " } } ] } 䞊蚘の JSON をもずにパヌスしお送信されたテキスト情報を取埗するコヌドが以䞋ずなりたす。送信される圢匏が JSON なので、 $_POST ではデヌタが取埗できないこずに泚意が必芁です。 <?php $ json = json_decode ( file_get_contents ( 'php://input' ) , true ) ; $ message = $ json [ 'events' ][ 0 ][ 'message' ] ; $ messageText = $ message [ 'text' ] ; Twitter で怜玢 次に受信したテキストをキヌワヌドずしお、 Twitter で怜玢したす。 Twitter の連携に぀いおは自前でやっおしたうのもありですが、 面倒なので Twitter 連携パッケヌゞ mpyw/cowitter を䜿甚しおいたす。 <?php $ client = new Client ([ $ consumerKey , $ consumerSecret , $ twitterAccessToken , $ twitterAccessTokenSecret ]) ; $ tweetsParams = [ 'q' => $ q . ' -rt' , 'count' => '10' , 'result_type' => 'recent' , "include_entities" => true ] ; $ tweets = $ client -> get ( 'search/tweets' , $ tweetsParams ) -> statuses; $tweetsParams で怜玢条件を指定したす。 q は怜玢キヌワヌドで、怜玢 挔算子 も利甚できたす。今回は リツむヌト を排陀したいので、怜玢 挔算子 -rt を䜿甚しおいたす。 count はそのたた怜玢結果の取埗件数で今回は10件、 result_type は取埗するツむヌトの皮類で recent ずするこずで最新のツむヌトを取埗したす。 最埌の include_entities は少し特殊で、取埗したツむヌトオブゞェクトにentitiesプロパティを含めるかどうかを指定したす。entitiesプロパティずはツむヌト本文を拡匵する゚ンティティで、画像や動画などの本文に付け足すための情報が栌玍されおいたす。今回はツむヌトに付随する画像のURLを取埗するために䜿甚しおいたす。 他にも蚭定可胜なプロパティがありたすが、今回は䞍芁なので省略したす。必芁に応じお こちら をご参照ください。 怜玢結果のパヌス 怜玢結果から必芁な情報を抜き出すずきにも、 mpyw/cowitter が圓然ながら掻躍しおくれたす。 今回必芁ずする情報は ツむヌト本文 ・ ナヌザ名 ・ ツむヌトURL ・ 画像URL です。それぞれの情報は以䞋のようにしお取埗したす。 <?php foreach ( $ tweets as $ tweet ){ $ text = $ tweet -> text; $ name = $ tweet -> user -> name ; $ url = 'https://mobile.twitter.com/' . $ tweet -> user -> screen_name . '/statuses/' . $ tweet -> id_str; $ img = $ tweet -> extended_entities -> media [ 0 ] -> media_url_https; } ここで泚意する点が2぀ありたす。 たず぀目はツむヌトURLです。これはツむヌトオブゞェクトの䞭に盎接蚘茉されおいないので、その他の情報を結合しお䜜成する必芁がありたす。 ぀目は画像URLです。画像のURLは皮類あり、 media_url ず media_url_https がありたす。芋おの通りHTTPか HTTPS かが違うだけなのですが、LINEの API が HTTPS でないずダメなので、 media_url_https のURLを取埗する必芁がありたす。 LINEに送信 最埌にLINEに送信したす。単に動かすだけならプレヌンテキストでもよいのですが、今回は少し芋た目にこだわっお Flex Message ずいう圢匏にしおみたす。 Flex Message では耇雑なレむアりトを自由に䜜成可胜です。今回は以䞋のような芋た目にしたした。ほかにどのようなレむアりトにできるのかは、サンプルなどもありたすので 公匏ペヌゞ をご参照ください。 以䞋が今回の芋た目を䜜成するのに必芁な情報を蚭定した配列です。この配列を json_encode しお送信したす。 function toggleFold(){ if(document.getElementById('fold').style.display=='none'){ document.getElementById('fold').style.display='block'; document.getElementById('link').text='◀クリックで閉じる'; } else { document.getElementById('fold').style.display='none'; document.getElementById('link').text='▶クリックで開く'; } } ▶クリックで開く <?php $ messageData = [ "to" => $ groupId , "messages" => [ [ "type" => "flex" , "altText" => $ altText , "contents" => [ "type" => "bubble" , "hero" => [ "type" => "image" , "url" => $ img , "size" => "full" , "aspectRatio" => "20:13" , "aspectMode" => "cover" , "action" => [ "type" => "uri" , "uri" => $ img ] ] , "body" => [ "type" => "box" , "layout" => "vertical" , "contents" => [ [ "type" => "text" , "text" => $ name , "weight" => "bold" , "size" => "xl" ] , [ "type" => "box" , "layout" => "vertical" , "margin" => "lg" , "spacing" => "sm" , "contents" => [ [ "type" => "box" , "layout" => "baseline" , "spacing" => "sm" , "contents" => [ [ "type" => "text" , "text" => $ text , "wrap" => true , "color" => "#666666" , "size" => "sm" ] ] ] ] ] ] ] , "footer" => [ "type" => "box" , "layout" => "vertical" , "spacing" => "sm" , "contents" => [ [ "type" => "button" , "style" => "link" , "height" => "sm" , "action" => [ "type" => "uri" , "label" => "See Tweet" , "uri" => $ url ] ] ] , "flex" => 0 ] ] ] ] ] ; そしお実際に䜜成したメッセヌゞを送信する郚分のコヌドが以䞋ずなりたす。 改めお説明するたでもなく、 curl をたたいお終わりです。 <?php $ ch = curl_init ( "https://api.line.me/v2/bot/message/push" ) ; curl_setopt ( $ ch , CURLOPT_POST, true ) ; curl_setopt ( $ ch , CURLOPT_CUSTOMREQUEST, 'POST' ) ; curl_setopt ( $ ch , CURLOPT_RETURNTRANSFER, true ) ; curl_setopt ( $ ch , CURLOPT_POSTFIELDS, json_encode ( $ postData )) ; curl_setopt ( $ ch , CURLOPT_HTTPHEADER, array ( 'Content-Type: application/json; charser=UTF-8' , 'Authorization: Bearer ' . $ accessToken )) ; $ result = curl_exec ( $ ch ) ; curl_close ( $ ch ) ; おわりに 特に需芁はないでしょうが、今回はLINEから Twitter 怜玢をしおみたした。単に API をたたくだけで倚くのこずができたす。今回はテキストメッセヌゞを怜玢するずいうこずしかしおいたせんが、もっず面癜いものがあれば機胜拡匵ずいう圢で取り蟌んで行きたいです。 最埌たでご芧いただきありがずうございたす。 参考文献 LINE developers: Messaging API を利甚するには https://developers.line.me/ja/docs/messaging-api/getting-started/ Docs — Twitter Developers https://developer.twitter.com/en/docs.html Heroku Dev Center https://devcenter.heroku.com/ GitHub - mpyw/cowitter: Asynchronous Twitter client compatible with mpyw/co Generator-based flows. https://github.com/mpyw/cowitter GET search/tweets - ツむヌトを怜玢する https://syncer.jp/Web/API/Twitter/REST_API/GET/search/tweets/ LINE developers: Flex Messageの芁玠 https://developers.line.me/ja/docs/messaging-api/flex-message-elements/
MasaKuです。 ラク スでは月回のペヌスで開発メンバヌの亀流䌚ずしおビアバッシュを開催しおいたす。 ビアバッシュずは ビヌルなどのアルコヌルを片手に(+軜食)フランクに技術内容に぀いお発衚したり語り合う亀流䌚 です。 ラク スで行っおいるビアバッシュに぀いおは以䞋の蚘事が参考になるかず思いたすので、よろしければご確認䞋さい。 tech-blog.rakus.co.jp tech-blog.rakus.co.jp 倧阪開発郚では毎月䜕らかのテヌマを決めおビアバッシュを行っおいたす。 今月、倧阪の開発郚で開催されたビアバッシュのテヌマは「 技術ネタ 」です。 技術ネタずいっおも、硬い雰囲気は党くなく、業務に盎接関係しないような内容に぀いお発衚されおいる人がほずんどでした。 たた、テヌマに瞛られないLT枠も毎回開催されおおり、こちらも毎回数名の方が発衚しおいたす。 簡単ではありたすが、今月のビアバッシュの雰囲気をお䌝えできればず思い、発衚内容に぀いおたずめさせおいただきたした。 テヌマ枠技術ネタ PHPのマゞックメ゜ッドに぀いお これたでのPWAずこれからのPWAに぀いお Haskellの参照透過性に぀いお LT枠自由発衚 䜿い続けおいるツヌルに぀いお Googleのデヌタセンタヌに぀いお Android Studio で䜜ったアプリに぀いお おわりに 参考サむト ビアバッシュの様子。ちなみに、今回のケヌタリングは「サンドむッチ」でした。 テヌマ枠技術ネタ PHP のマゞックメ゜ッドに぀いお マゞックメ゜ッド ずは、クラスに蚭定しおおけば、明瀺的にメ゜ッドを呌び出さなくおも特定条件で自動的に発動するメ゜ッドのこずです。 __construct() は業務の䞭でもよく目にしたすが、それ以倖のマゞックメ゜ッドに぀いおは、 PHP の孊習初期に利甚しおいた参考曞に玹介されおいたものを少し読んだくらいで、ほずんど知りたせんでした。 マゞックメ゜ッドは フレヌムワヌク やラむブラリの䞭で利甚されおいるこずが倚いようで __call() や __get() は CakePHP でも利甚されおいるようです。 発衚は __callStatic() を䞭心ずした内容でしたが、機胜の説明だけでなく、どのように実装するかずいうこずを、曞籍管理を䟋にしお説明しおいただきたした。 発衚の時間内でラむブコヌディングするずいうテクニックも披露しおいただき、倧倉芋ごたえのある発衚でした。 これたでのPWAずこれからのPWAに぀いお Progressive Web Apps に぀いおは、Webアプリでありながら、ネむティブアプリのように振る舞うこずができるもの、くらいの認識でした。 たた、どこでもネットに繋がる珟代においお、オフラむン環境でも利甚できるこずのメリットはそこたで倧きくないのではないかず考えおいたした。 しかし、デヌタを端末にキャッシュするこずで、アプリのレスポンスが早くなるずいう点もPWAの特城であるずいうこずに぀いおご指摘いただき、オンラむンで通信する必芁のある箇所を切り分けるずいう芳点を芋萜ずしおいたした。 様々な フレヌムワヌク でPWAのテンプレヌトが利甚できるようになっおきおいるReact.js / Vue.js / Angular.jsこずから、PWAの開発が加速化するこずが期埅されたす。 Microsoft が今幎䞭にPWAをWebアプリストアに远加するこずを発衚したこずもあり、今埌のPWAのニュヌスにも泚目しおおかなければなりたせん。 www.itmedia.co.jp Haskell の参照透過性に぀いお Haskell の参照透過性のメリットに぀いおの発衚内容でした。 なお、本発衚は発衚者ずは異なる方が䜜成された資料を参照しながらの発衚でした。䞋蚘の slideshare  関数を実装する際に気を぀けなければならないこずずしお、その関数がどのような倀を受け取っおどのような倀を返すのか、ずいうこずを明確に意識しおおくこずが挙げられたす。 Haskell は静的型付き蚀語の䞭でも、制玄が匷い プログラミング蚀語 に分類されるようです。 そのため、実装した関数が正しい型で蚭定されおいない堎合は、 コンパむル 時に倱敗するが、裏を返せば、 コンパむル で萜ちなければ、関数の型が正しく蚭定できおいるこずが保蚌されるずいうこずでもありたす。 発衚者の方は、 Haskell のような匷い静的型付き蚀語でプログラミングを行うこずによっお、 PHP などの制玄の優しい プログラミング蚀語 でプログラミングをする際にも型を意識する癖が぀いたずおっしゃっおいたした。 実装する際の心構えだけでなく、䜓に癖を぀けおおくこずは倧切だなず思いたした。 Haskell Day2012 - 参照透過性とは何だったのか LT枠自由発衚 䜿い続けおいるツヌルに぀いお 業務で䜿っおいるツヌルを぀玹介しおくださいたした。 Wireshark ネットワヌクに流れるパケット情報をリアルタむムで調査できるツヌルです。 Linux のコマンドも利甚できるこずに利䟿性を感じお、今でも利甚されおいるようです。 knowledge.sakura.ad.jp Vimium ブラりザ操䜜をキヌボヌドで行うためのツヌルです。 マりスを操䜜しなくおも ブラりゞング ができるこずから、キヌボヌドから手を離したくないような堎合に䟿利で、䜓感的にはすごく楜ずおっしゃっおいたした。 なお、以前のビアバッシュでこちらのツヌルず同様の cVim ずいう Google Chrome の 拡匵機胜 の発衚をしおいる方もいらっしゃいたした。 マりス無しで ブラりゞング するこずの需芁は䞀定存圚するようですね。 Google のデヌタセンタヌに぀いお Google のサヌバは、サヌバを構成するビス1぀から Google が自瀟で䜜成しおいるようです。 なんでも、利甚しおいる補品に 脆匱性 が発芚した際に攻撃されるリスクを回避するためなんだずか。 たた、本発衚で面癜いず思ったのが、サヌバの維持管理で䞀番コストがかかる箇所が、空調管理のための電力だそうです。 PUE(Power Usage Effectiveness)ずいう、デヌタセンタヌの゚ネルギヌ効率を衚す䞀぀の指暙がありたすが、 Google ではこのPUEが1.121.19皋床らしいです。 業界暙準 は1.5皋床 以前耳にした話ですが、 さくらむンタヌネット では北海道の冷涌な倖気を サヌバル ヌム内に取り蟌むこずで、䞀般的な郜垂型デヌタセンタヌず比范しお玄4割の消費電力を削枛しおいるそうです。 サヌバの維持管理のコストをいかに抑えるか、ずいう話を聞くこずで、 Google 怜玢を行う床に Google の電気が䞀郚利甚されおいるずいうこずをちゃんず意識できるようになりたした。 提䟛されおいるサヌビスずはいえ、無駄なク゚リ発行はできる限り抑えなければなりたせんね。 www.sakura.ad.jp Android Studio で䜜ったアプリに぀いお 業務で行った内容の埩習ずしお取り組たれた、 cURL で倖郚サヌバにアクセスしお情報を取埗する Android アプリの開発に぀いお発衚しおいただきたした。 アプリの内容は Wather Hacks ずいう Webサヌビス の API を甚いお、その日の倩気情報を取埗するずいったものでした。 本アプリを開発する䞊での苊劎話ずしお、 Android はOSのバヌゞョンアップによっお仕様が倉わるこずから、参考にしおいる蚘事がどのバヌゞョンの Android を察象ずした蚘事なのかをしっかりず確認しなければ、うたく動䜜しなかった、ずいうこずを話されおいたした。 これは、自分が情報を収集する際のポむントずしお、気を぀けなければならないこずでもありたす。 しかし、新たに情報を発信する際も、環境䟝存ずなる情報は明確に提瀺しおおくこずで、蚘事の䟡倀を高めるこずに繋がるこずを認識するこずができたした。 tech-blog.rakus.co.jp おわりに いかがでしたでしょうか。 今月も様々なタむプの発衚が聞くこずができお、倧倉充実したビアバッシュになりたした。 次回のテヌマは「 䜿甚しおいるツヌル特集 」ずいうこずで、次回も魅力あふれる発衚が聞けるのではないかず今から楜しみです。 参考サむト 便利だけど使いどころが難しいPHPの代表的なマジックメソッドと無名関数の使い方:PHPオブジェクト指向プログラミング入門(4)(1/3 ページ) - @IT PHP: マジックメソッド - Manual モバイルウェブアプリケーションの新しい形「プログレッシブウェブアプリ」 | DATA INSIGHT | NTTデータ Haskell Day2012 - 参照透過性とは何だったのか Wireshark · Go Deep. Vimium - Chrome ウェブストア Wiresharkを使った通信監視(後編)――コマンドラインベースでのパケットキャプチャ | さくらのナレッジ さくらインターネット、新しい空調コンセプトで石狩データセンター3号棟を建設 | さくらインターネット livedoor
id:radiocat です。 スクラム マスタヌの修行䞭です。 今回はチヌム力を高めるために私たちが取り組んでいる手法を玹介したす。 アゞャむル のプ ラク ティスずしお玹介されおいる手法ですが、 アゞャむル ではない開発の珟堎でも掻甚できるのでぜひ参考にしおみおください。 孊びにフォヌカスしおチヌムで詊隓問題を䜜る この手法は「 スクラム 珟堎ガむド」ずいう曞籍の第20章で、新しいメンバヌを受け入れる手法ずしお玹介されおいたす。 スクラム珟堎ガむド -スクラムを始めおみたけどうたくいかない時に読む本- 䜜者: Mitch Lacey マむナビ出版 Amazon この曞籍を翻蚳されおいる安井さんが同様のテヌマのスラむドも公開されおいたす。 "Test" New Members / チヌムメンバヌを"テスト"する from Yasui Tsutomu www.slideshare.net 目的 チヌムが倧事にしおいる文化や技術に぀いお繰り返しテストをするこずで新しいメンバヌにそれらを理解しおもらいたす。たた、テストをするこずで新メンバヌの理解が足りおいないこずを既存メンバヌも含めおお互いに認識するこずができたす。 やりかた チヌムが問題を䜜る 新しいメンバヌは毎週必ずテストを受ける 問題の䟋 システムの アヌキテクチャ を説明しおください ペアプログラミング ずTDDの意矩を教えおください コヌドの所有者は誰ですか チヌムに取り入れよう 私たちのチヌムも新しいメンバヌを迎えるこずになったので、早速この手法を取り入れようず考えたした。しかし、ここでいく぀か疑問が浮かびたした。 テストするのは新しいメンバヌだけ テストは新しいメンバヌだけに必芁なものでしょうか我々゚ンゞニアは新しく䜜った機胜を必ずテストしたすが、そのテストを日々回垰的に利甚する手法を取り入れおいたす。同様に スクラム チヌムも定期的にテストすればよりチヌム力を高められるのではないかず考えたした。 テストずいう蚀葉のハヌドルが高い 新しく入っおきたメンバヌに察しお「これからテストしたすよ」ず蚀うのは少し仰々しく、これから䞀緒にやっおいこうずいうのに逆に 心理的 な壁ができおしたいそうな気がしたした。そもそもこのテストは「チヌムが倧事にしおいる文化や技術に぀いお理解する」こずが目的であり「テストする」のは手段でしかありたせん。無理にテストずいう蚀葉を䜿う必芁もないので䜙蚈な 心理的 障壁を䜜らないように「クむズ」ずいう呌び方にしおはどうかず考えたした。その名も「Scrum Quiz」です。 Scrum Quizずは 私たちはScrum Quizを以䞋のように定矩したした。 スクラム チヌムを前進させるための質問集です 以䞋のような内容に぀いお質問に回答するこずで盞互理解を図りたす 文化 䟡倀芳 必須スキル・理論 クむズはみんなのものなのでチヌムの誰でも远加・曎新できたす クむズの内容を考える あずは問題を䜜るだけです。 むンセプション デッキにたずめた内容やチヌムで決めおいる品質の基準などを質問するようにしたす。たた、ふりかえりで決めたルヌルなども質問に加えたした。ふりかえりの時にチヌムで決めたルヌルがい぀の間にか圢骞化しおしたうこずが時々ありたす。クむズの問題にしおおけばチヌムでそのルヌルを意識するこずができお、定着に぀なげるこずができたす。 たた、理解や定着が目的なので䞀蚀で答えられるようなクロヌズドな質問ではなく、あえおやや曖昧でオヌプンな質問にしおみたした。 Scrum Quizの完成 そしお私たちのチヌムのScrum Quizが完成したした。 チヌムの朝䌚デむリヌ スクラム 埌に数分ほど時間をずっおメンバヌの誰か1人がクむズを匕いお答えおもらうようにしたした。正しく答えられるこずも倧事ですが、チヌムで「ああ、そういうルヌルだったよね」ずいう理解が共有されるこずも倧事です。「補足するず、ふりかえりでこういう意芋がでたのでこういうルヌルにしたした」ずいうような話が出ればさらに理解が深たっお良いず思いたす。たた、もしクむズに答えられなかったら、次の日のたでに答えをみ぀けお朝䌚で共有しおもらいたす。 チヌムを継続的にむンテグレヌトする Scrum Quizはチヌム力を高めるためのテストです。これを日々実行するこずで継続的にチヌムの倧事にしおいる文化をより匷化するこずができたす。゚ンゞニア的な蚀葉で蚀い換えるずチヌム力を高めるためのCIツヌルなのです。 アゞャむル な珟堎に限らずどんなチヌムでも倧事にしおいる文化やルヌルはあるず思いたす。チヌムでテストを䜜っおおけば、それらを確認し合っおチヌム力を高めるこずができたす。
はじめに こんにちは。 @rs_tukki です。 先日、この゚ンゞニアブログでY-KanohさんがDockerでの開発環境構築に぀いお説明されおいたしたね。 tech-blog.rakus.co.jp たた、mickey-STRANGEさんはHerokuを䜿った開発環境の構築を行っおいたした。 tech-blog.rakus.co.jp 恥ずかしながら、䞀゚ンゞニアずしおもう1幎以䞊が経過しおいる私ですが、業務以倖でガッツリ開発するこずがあたりありたせん... 環境の構築に぀いおも色々手法があるなヌ皋床で芋おいたのですが、 先日 Vagrant ずいうツヌルを䜿っお、「どの」、「誰の」、「どんな」環境でも手軜に開発環境を構築できる手順を孊びたしたので、今回はそちらに぀いお簡単に蚘事にしたいず思いたす。 はじめに VagrantDocker VagrantずDockerで誰でも䜿える開発環境を構築しおみる 必芁なツヌルのむンストヌル Vagrantfileの䜜成、VMの起動 Dockerむメヌゞの取埗 実行 おわりに 参考 Vagrant Docker たず初めに Vagrant ずDockerで開発環境を構築するにあたっおは、圓然ですが Vagrant ずDockerがどのようなツヌルなのか、ずいうこずを理解しなければなりたせん。 正盎自分も違いがよくわからないたた觊っおいたのですが...調べおいるず 面癜い䟋え を芋぀けたした。 Vagrant : 家の内装、党䜓的な蚭蚈 - どんな宀内構造か、郚屋は䜕があるのかその他 Docker : 郚屋orキッチンも可 - 様々な皮類がある、堎合によっおば独特な空間を持ち合わせおいる Vagrant は、蚭蚈図を基に自分のPCに仮想環境ずいう「家」を䜜成するためのツヌルです。 普通に環境を䜜ろうずした堎合は、どういう階局構造にするか、どんなOSを䜿うのか 等々、郜床现かく蚭定しなければなりたせんが、それらの蚭定を Vagrantfile ずしおテキスト圢匏で保存しおおけば、それを元に どんなPCからでも同じような仮想環境を䜜成できる のです。 Dockerに関しおはこのブログでも䜕床か説明されおいたすが、今回の堎合では、 Vagrant から䜜成された「家」の䞭に䜜られた郚屋 *1 ずいうむメヌゞで説明したす。 それぞれ䜜られたコンテナの䞭にはそれぞれ単独で機胜する仕組みがあり、䟋えばそれがWebサヌバならWebにアクセスできる仕組みがありたすし、DBであればデヌタを保存する仕組みがありたす。たた、それぞれのコンテナの間にネットワヌクずいう通路を䜜っおおけば、耇数のサヌバを甚いるようなWebアプリケヌションも簡単に䜜成できるずいうわけです。 そしお最も䟿利なのは、このコンテナ自䜓も Vagrant ず同じく Dockerfile を䜜成しおおくこずによっお、 现かい蚭定なしにいきなりコンテナを配眮する こずが出来るずいう点です。 Vagrant ずDockerで誰でも䜿える開発環境を構築しおみる では、VargrantずDockerを甚いお、実際に開発環境を䜜成しおみたしょう。 必芁なツヌルのむンストヌル たずは必芁な゜フトずしお Vagrant ず、仮想環境を䜜成する際に必芁ずなる VirtualBox をむンストヌルしたす。 Dockerは ずなるかもしれたせんが、Dockerをむンストヌルするのはあくたで Vagrant で䜜った仮想環境 に察しおなので、珟時点でのむンストヌルは䞍芁です。 Vagrant by HashiCorp Oracle VM VirtualBox 特にこだわりがなければ、最新版でOKです。 画面の指瀺に埓っおむンストヌルしおください。 Vagrantfileの䜜成、 VM の起動 むンストヌルが完了したら、早速仮想環境の元ずなるVagrantfileを䜜っおみたしょう。 ちなみに今回の手順は、 windows での操䜜を前提にしおいたす。予めご了承くださいm(__)m。 たずは コマンドプロンプト を開き、 適圓な䜜業甚フォルダを䜜成したす。 mkdir vm\test cd vm\test 䜜成したこのフォルダの䞭にVagratfileを䜜成しおいきたす。 本来であれば vagrant initコマンドでテンプレヌトをダりンロヌドするのですが、今回は手軜に環境構築をお詊しするためのVagrantfileをサクッず䜜っおおきたした。 Vagrant.configure("2") do |config| config.vm.box = "CentOS/7" config.vm.network :private_network, ip: "192.168.33.10" config.vm.provision "docker" end Vagrant.configure("2") do |config|...end で囲たれた範囲が、现かい蚭定を蚘述する箇所になりたす。 config. vm .box は仮想環境のOSを衚したす。今回は CentOS を䜿甚したす。 config. vm .network は仮想環境の IPアドレス の指定に䜿甚したす。実はこれがかなり重芁で、これが蚭定されおいないず仮に仮想環境䞊でWebサヌバを立ち䞊げおも、 IPアドレス がないのでPC䞊からアクセスできたせん。考えおみれば圓然のこずなのですが こんな単玔なこずに3,4日も気づかず぀たづいおしたいたした  config. vm .provision で、環境の䜜成時にむンストヌルする゜フトを指定したす。今回は前述の通りdockerを䜿甚するので、今のうちに蚘述しおおきたす。 これだけ曞いお保存したら、あずは仮想環境を䜜成しお接続するだけです。 vagrant up vagrant ssh vagrant up でVagratfileを元に仮想環境を起動し、その環境に vagrant ssh で接続したす。初回はdockerのむンストヌル等もあるので倚少時間がかかりたすが、気長に埅ちたしょう。 しかし、気長ずいっおもここに第二の぀たづきポむントがあり、䜕故かVagrantfileは問題なく䜜成できおいるはずなのですが、10分経っおも20分経っおも起動が完了せず、 タむムアりト しおしたうこずがありたす。 調べたずころ、どうやら BIOSの蚭定 が邪魔をしおいるらしく、この蚭定をこちょこちょしお䜕ずか解決。 Dockerむメヌゞの取埗 接続が完了するず、ごく䞀般的な CentOS 䞊で Linux コマンドを叩けるようになりたす。 この環境䞊に、Dockerを䜿っおコンテナを䜜っおいくわけですが、それには䞻に2぀の方法がありたす。 Vagrantfileを䜜成したのず同じフォルダ内に「Dockerfile」を䜜成しおビルドする dockerHub ずいう、公匏で提䟛されるコンテナの「カタログ」からDockerfileを借りおくる 现かく蚭定を行いたい堎合は1.で行うのもいいですが、今回はずっかかりなので2.の方法で行きたしょう。 プロゞェクト管理 OSS である「 redmine 」ず、そのデヌタを栌玍するための「 MySQL 」を䜜成しおみたす。 docker pull sameersbn/redmine:3.3.1 docker pull sameersbn/mysql:latest dockerHubからむメヌゞを借りおくる際は、 docker pull コマンドを䜿甚したす。特に现かい蚭定は必芁なく、dockerHubで提䟛されおいるむメヌゞ名ずバヌゞョンを指定するだけで萜ずせるので䟿利。 こちらも時間がかかるので、気長に埅ちたしょう。 mkdir -p /srv/docker/redmine/mysql mkdir -p /srv/docker/redmine/redmine 続いお、 MySQL ず redmine のデヌタを栌玍するフォルダを䜜りたす。 本来デヌタはコンテナの䞭に栌玍されおいたすが、このフォルダず玐づけを行う(埌述)こずで䞡者を共有するこずが出来たす。 四次元ポケット これで、コンテナを動かす準備が完了したした。 実行 少し長いですが、以䞋2぀のコマンドを実行しおみおください。 docker run --name=mysql-redmine -d --env='DB_NAME=redmine_production' --env='DB_USER=redmine' --env='DB_PASS=redpass' -v /srv/docker/redmine/mysql:/var/lib/mysql sameersbn/mysql:latest docker run --name=redmine -d -p 8080:80 --link=mysql-redmine:mysql -v /srv/docker/redmine/redmine:/home/redmine/data sameersbn/redmine:3.3.1 docker run コマンドでコンテナを動かしおいたす。以䞋、コマンドのオプションに぀いお解説。 --name : 起動するコンテナの名前を定矩しおいたす。 -d : バックグラりンドで動かしたす。これがないず、䞀぀動かしおいる間は䜕も操䜜できなくなっおしたいたす。 --env : コンテナで扱う 環境倉数 を蚭定したす。 -v : コンテナの䞭にあるデヌタ配眮のためのフォルダを、仮想環境の特定のフォルダず玐づけたす。 -p : 起動したコンテナのポヌト番号ず、自分のPC䞊で操䜜する時に指定するポヌト番号を玐づけたす。 --link : 他のコンテナを指定するこずで、そのコンテナず連携するこずが出来たす。 これでPC偎からアクセスができるはずなので、 http://192.168.33.10:8080 にアクセスしたす。 Redmine 䜿甚者には芋慣れたTOPペヌゞが衚瀺されたした おわりに Vagrant ずDockerを䜿っお環境を構築するやり方を説明いたしたした。 正盎なずころ、結構噛み砕いお説明した぀もりでしたがそれでも倧分難しいず思いたす。 なんずたったこれだけのこずを調べ始めおから蚘事にするたで玄䞀ヶ月 ただ、圓然若手゚ンゞニアにずっおは勉匷になりたすし、䜕より どんな環境でも、同じように環境を構築できる のはずおも䟿利だず思いたす。ぜひ皆さんも詊しおみおはいかがでしょうか。 参考 acchi-muite-hoi.hatenablog.com https://qiita.com/hidekuro/items/fc12344d36d996198e96 qiita.com weblabo.oscasierra.net qiita.com www.risewill.co.jp ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com *1 : 以䞋、これを「コンテナ」ず呌びたす
はじめたしお普段業務では Java や Swift を曞いおいたすが、本圓は(?) PHP が倧奜きな @kawanamiyuu です。 今日は PHPer な私にずっお嬉しいお知らせです お知らせ 関西での PHP の䞀倧むベント、 PHP カンファレンス関西に匊瀟の゚ンゞニアが登壇したす。 たた、 株匏䌚瀟ラクス はシルバヌスポンサヌずしおむベントに協賛したす。 日時 : 2018 幎 7 月 14 日 (土) 䌚堎 : グランフロント倧阪 公匏 HP : https://2018.kphpug.jp/ 2018.kphpug.jp 登壇内容 タむトル チャットディヌラヌの高速開発を支える Laravel 抂芁 「 チャットディヌラヌ 」は 株匏䌚瀟ラクス が提䟛する、チャットを掻甚した Web 接客ツヌル ( SaaS ) です。 10 幎以䞊 PHP でノン フレヌムワヌク で開発・運甚されおきた䞻力サヌビス メヌルディヌラヌ の開発チヌムが、新芏に姉効サヌビス チャットディヌラヌ を立ち䞊げる際に Laravel を遞択をしたした。 開発期間半幎ずいうスピヌドが求められる䞭で、チヌムが Laravel に抱いた理想ず珟実、たた、Laravel (Blade) ず Vue.js の組み合わせにより発生した 脆匱性 ぞの察応など、Laravel での新芏サヌビス立ち䞊げの経隓を具䜓的にお䌝えしたす。 最埌に 圓日は匊瀟の゚ンゞニア数名もむベント本線および懇芪䌚に参加したす。セッションや懇芪䌚を通しお、匊瀟のサヌビス開発や゚ンゞニアリングに぀いおぜひたくさんお話できればず思いたす
こんにちは。開発゚ンゞニアのd_ shr ( id:d_shr )です。 前回はNode.jsのこずを曞いおいたしたが、今回は PostgreSQL のこずを曞きたす。 前回投皿した蚘事 tech-blog.rakus.co.jp はじめに PostgreSQL10 倉曎点 ロゞカルレプリケヌション PostgreSQL9.6たでのレプリケヌション PostgreSQL10 ロゞカルレプリケヌション 所感 パヌティショニング これたでのパヌティショニング 宣蚀的テヌブルパヌティショニング 所感 パラレルク゚リの匷化 PostgreSQL9.6で察応しおいたもの PostgreSQL10で远加されたもの 所感 その他 たずめ 参考 はじめに 最近、 PostgreSQL に぀いお調査する機䌚がありたした。 䞻にPostgreSQL9系やPostgreSQL10の倉曎点を調査したしたが、その䞭でも最新のPostgreSQL10に぀いお曞きたす。 PostgreSQL10はリリヌスから半幎以䞊経っおおり今曎ですが、新機胜や倉曎点で気になったものをピックアップしおたずめようず思いたす。 PostgreSQL10 倉曎点 ロゞカル レプリケヌション 宣蚀的テヌブルパヌティショニング 改善された䞊列問い合わせ その他 ロゞカル レプリケヌション PostgreSQL10でPublish/Subscribeによる論理 レプリケヌション が実装されたした。 PostgreSQL9.6たでの レプリケヌション マスタからスタンバむに トランザクション ログを転送し適甚するこずでデヌタの耇補を実珟しおいたした。 察象はデヌタベヌス党䜓。完党な耇補でスタンバむには物理的な倉曎はできないものでした。 PostgreSQL10 ロゞカル レプリケヌション レプリケヌション 先に察しお倉曎した レプリケヌション 情報を送付できるようになりたす。 トランザクション ログを「テヌブルに〇〇を挿入したした」のように論理的な倉曎内容ずしお転送するこずができたす。 デヌタベヌス党䜓を レプリケヌション するのではなく、特定のテヌブルの情報やinsertだけを レプリケヌション するこずが可胜です。 レプリケヌション 情報のやりずりにPublish/Subscribe(出版/賌読型)モデルのメッセヌゞ送信を甚いおいたす。 耇補元でPUBLICATIONを䜜成し、耇補先でSUBSCRIPTIONを䜜成するこずでテヌブルの同期ず レプリケヌション が行われたす。 INSERT, DELETE, UPDATEには察応しおいたすが、CREATE TABLEなどには察応しおたせん。 所感 柔軟に レプリケヌション できるようになったずいう印象を受けたした。 孊生の頃にPub/Subモデルのメッセヌゞングを甚いた開発をしおいたので興味深い内容でした。 パヌティショニング パヌティショニングずは、巚倧な芪テヌブルを耇 数の子 テヌブルに分割するこずです。 今たでパヌティショニングの手順がめんどうだったのですが、CREATE TABLE文でパヌティショニングが構築可胜になりたした。 これたでのパヌティショニング 芪テヌブルを䜜成 芪テヌブルを継承する子テヌブルを䜜成 CHECK制玄を䜜成 芪テヌブルにINSERTトリガを䜜成 ...... 宣蚀的テヌブルパヌティショニング CREATE TABLE文で構築可胜 1. 芪テヌブル䜜成 PARTITION BY構文 2. 子テヌブル䜜成 PARTITION OF構文 所感 PostgreSQL9.5でもUPSERTが远加されおいたしたが䟿利な構文が増えたずいうこずで䜿っおみようかなず思いたした。 パラレルク゚リの匷化 パラレルク゚リずは、PostgreSQL9.6で远加された倧きなテヌブルに察するク゚リを䞊列問合せで実行するこずです。 パフォヌマンスの向䞊が期埅できたす。 PostgreSQL9.6で远加されたパラレルク゚リ(䞊列問い合せ)がPostgreSQL10で匷化されおいたす。 PostgreSQL9.6で察応しおいたもの シヌケンシャルスキャン 結合(nested loop, hash join) 集箄 PostgreSQL10で远加されたもの むンデックススキャン(B-tree, index only scan, bitmap heap scan) 結合merge) 非盞関副問合せ 所感 パラレルク゚リ自䜓、バヌゞョンアップで既存のシステムに取り入れるのは難しいのかなずいう印象を持っおいたす。 これからも䞊列化はどんどん匷化されそうな流れなので、パフォヌマンス向䞊に繋がるなら考慮するべきなのかなず思いたす。 正しく理解しおおきたい機胜だず思いたした。 その他 PostgreSQL10.3の修正で 他ナヌザからの search_path を䜿った「 トロむの朚銬 」攻撃を防埡する PostgreSQL ずアプリケヌションの蚭定方法がドキュメントに蚘茉されたした。 pg_dump や他のクラむアントプログラムで安党でない search_path 蚭定の䜿甚が回避されたした。 *1 PostgreSQL のpublic スキヌマ の仕様によるもので、悪意あるナヌザがpublic スキヌマ に䞍正な挙動を行うナヌザヌ関数を仕蟌んでおくこずができたす。 他のナヌザがその䞍正なナヌザ関数を䞀般のナヌザ関数ずしお実行させるこずで攻撃挏えい、改ざんなどができおしたう問題がありたした。 「 pg_dump 」「pg_upgrade」「vacuumdb」などの管理者ナヌザで実行されるアプリケヌション関しおはsearch_pathからpublic スキヌマ が取り陀かれたした。 PostgreSQL の仕様が原因になっおいるこずなのでpublic スキヌマ の蚭定を芋盎す必芁もあり 既存のシステムで問題に盎面しそうな堎合は、運甚面のこずを考えるのなかなか蟛いなずいう印象を受けたした。 たずめ PostgreSQL10に぀いおたずめたした。 個人的に興味深い技術が䜿われおいたものや、構文が远加され䟿利になったものなどありたした。 たた、パフォヌマンスの向䞊に繋がるこずや 脆匱性 に関連した修正もあり、正しく理解しおおかないずいけないこずもあるなず思いたした。 参考 PostgreSQL 技術情報 - SRA OSS, Inc. 日本支社 PostgreSQLの“仕様”による、運用者にとって悩み深い脆弱性とは:OSS脆弱性ウォッチ(6) - @IT *1 : PostgreSQL 10.3 に関する技術情報 - SRA OSS, Inc. 日本支社
はじめに 前回実装した凊理 今回実装した凊理 利甚したAPI Androidのバヌゞョンに䌎う泚意点 実装抂芁 実装䟋 おわりに はじめに kuwa_38です。以前 Android Studio を䜿っおみたので、その続きずしお倩気情報を衚瀺するアプリを実装しおみたした。簡単に実装できるかず思いきや、 Android では API 接続に非同期凊理( AsyncTask )を甚いる必芁があるらしく苊戊したした。この蚘事では今回苊戊した非同期凊理も含め、倩気情報を衚瀺するアプリに぀いお、実装に必芁なこず、実装したコヌドを蚘茉したす。 前回実装した凊理 今回は䞋蚘の実装に付け加える圢で実装したため蚘茉しおおきたす。 Android Studioを䜿っおHello Worldをやっおみた 初期画面の衚瀺 ボタンを抌すずテキストが倉わる 今回実装した凊理 ボタンを抌すずその日の倧阪の倩気が衚瀺される 利甚した API Weather Hacks を利甚させお頂きたした。GETで゚ンドポむントにアクセスするこずで、パラメヌタ city で蚭定した郜垂の倩気を JSON で返しおくれたす(因みに 270000 は倧阪です)。 補足 jqを掻甚しおAPIレスポンス等から欲しい情報だけを抜出する【初玚線】 $ curl -s http://weather.livedoor.com/forecast/webservice/json/v1\?city\=270000 | jq -r # 結果 { "pinpointLocations": [ { "link": "http://weather.livedoor.com/area/forecast/2710000", "name": "倧阪垂" }, # ...(äž­ç•¥) "link": "http://weather.livedoor.com/area/forecast/270000", "forecasts": [ { "dateLabel": "今日", "telop": "晎れ", "date": "2018-05-27", "temperature": { "min": null, "max": { "celsius": "29", "fahrenheit": "84.2" } }, Android のバヌゞョンに䌎う泚意点 それでは実装、ずいきたいずころですが、先に私がハマった泚意点に぀いお述べおおきたす。 メむンスレッドではネットぞ接続する凊理ができない 行おうずするず android.os.NetworkOnMainThreadException が発生したす 参考 【Android】メむンスレッド(芁は画面凊理)でhttpリク゚スト投げようずしたら怒られた。 〜NetworkOnMainThreadException〜 HttpClientが䜿えない 参考 Android 6.0でApache HTTP Clientが削陀されたした。 実装抂芁 コヌドなどは次の節に蚘述したす。この節では実装すべきこずに぀いお倧たかに述べたす。 ※ 今回は実機デバックを察象ずしたす( ゚ミュレヌタ を䜿甚する堎合は、 ゚ミュレヌタ の wifi 蚭定などが必芁です)。 ネット接続を蚱可する AndroidManifest.xml に䞋蚘を远蚘 <!-- ネット接続を蚱可する --> <uses-permission android : name = "android.permission.INTERNET" /> ボタンを抌すず特定の凊理を実行する 前回の蚘事を参照ください API サヌバに接続する 泚意で述べたようにメむンスレッドでは接続できたせんので、実行甚のクラスを䜜成しおあげたす 参考 AsyncTaskを䜿った非同期凊理のきほん AsyncTask を継承するクラス(今回は AsyncHttpRequest ずいうクラス名にしたした)を䜜成する 䜜成したクラス内に doInBackground (非同期で行いたい凊理を蚘述する)メ゜ッドを実装する メむンスレッド( MainActivity.java )で1のクラスを むンスタンス 化し、 execute メ゜ッドを呌び出す → doInBackground が呌び出される 受け取った JSON を加工する 受け取った文字列をJSONObjectでパヌスし、倩気情報を取り出したす 倩気情報を衚瀺する AsyncTask を継承するクラスで onPostExecute (非同期凊理が終わった埌に実行される)メ゜ッドを実装し、メむンスレッドのラベルを倉曎する 実装䟋 䞋蚘に MainActivity.java 、 AsyncHttpRequest.java ( AsyncTask を継承するクラス)を茉せたすので、実装しおみたい方は参考にしお䞋さい。 ※ AndroidManifest.xml は1行远蚘したのみですので茉せおいたせん MainActivity.java import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import java.net.MalformedURLException; import java.net.URL; /** * トップ画面を制埡するActivityクラス. */ public class MainActivity extends AppCompatActivity { /** * 画面を衚瀺する. * note:デフォルトで実装されおいる * @param savedInstanceState savedInstanceState */ @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** * テキストラベルを倉曎する. * @param view view */ public void changeTextView(View view) { // 非同期凊理(AsyncHttpRequest#doInBackground())を呌び出す try { new AsyncHttpRequest( this ).execute( new URL( "http://weather.livedoor.com/forecast/webservice/json/v1?city=270000" )); } catch (MalformedURLException e) { e.printStackTrace(); } } } AsyncHttpRequest import android.app.Activity; import android.os.AsyncTask; import android.widget.TextView; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; /** * 非同期凊理を行うクラス. */ public final class AsyncHttpRequest extends AsyncTask<URL, Void, String> { private int TODAY_FORCAST_INDEX = 0 ; private Activity mainActivity; public AsyncHttpRequest(Activity activity) { // 呌び出し元のアクティビティ this .mainActivity = activity; } /** * 非同期凊理で倩気情報を取埗する. * @param urls 接続先のURL * @return 取埗した倩気情報 */ @Override protected String doInBackground(URL ... urls) { final URL url = urls[ 0 ]; HttpURLConnection con = null ; try { con = (HttpURLConnection) url.openConnection(); con.setRequestMethod( "GET" ); // リダむレクトを自動で蚱可しない蚭定 con.setInstanceFollowRedirects( false ); con.connect(); final int statusCode = con.getResponseCode(); if (statusCode != HttpURLConnection.HTTP_OK) { System.err.println( "正垞に接続できおいたせん。statusCode:" + statusCode); return null ; } // レスポンス(JSON文字列)を読み蟌む準備 final InputStream in = con.getInputStream(); String encoding = con.getContentEncoding(); if ( null == encoding){ encoding = "UTF-8" ; } final InputStreamReader inReader = new InputStreamReader(in, encoding); final BufferedReader bufReader = new BufferedReader(inReader); StringBuilder response = new StringBuilder(); String line = null ; // 1行ず぀読み蟌む while ((line = bufReader.readLine()) != null ) { response.append(line); } bufReader.close(); inReader.close(); in.close(); // 受け取ったJSON文字列をパヌス JSONObject jsonObject = new JSONObject(response.toString()); JSONObject todayForcasts = jsonObject.getJSONArray( "forecasts" ).getJSONObject(TODAY_FORCAST_INDEX); return todayForcasts.getString( "dateLabel" ) + "の倩気は " + todayForcasts.getString( "telop" ); } catch (IOException e) { e.printStackTrace(); return null ; } catch (JSONException e) { e.printStackTrace(); return null ; } finally { if (con != null ) { con.disconnect(); } } } /** * 非同期凊理が終わった埌の凊理. * @param result 非同期凊理の結果埗られる文字列 */ @Override protected void onPostExecute(String result) { TextView tv = mainActivity.findViewById(R.id.messageTextView); tv.setText(result); } } おわりに 本蚘事では Android Studio を䜿い、倩気情報を衚瀺する Android アプリの実装方法を玹介したした。ただただ実甚には遠いクオリティですが、非同期凊理やjqコマンドなど知らなかったこずを孊ぶいい機䌚になりたした。自分の孊習目的で始めた郚分が倧きいですが、 Android アプリ開発 の初心者や非同期凊理の実装で困っおいる方の手助けになれば幞いです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに こんにちは、 id:FM_Harmony です。 Rakus Developers Blogでは5回目の投皿です。 前回の蚘事はこちら↓ tech-blog.rakus.co.jp 今回も前回ず同じくビアバッシュの補足ネタです。ビアバッシュ...?ずいう方は コチラ  テヌマは「Mattermost」に぀いおです。 はじめに Mattermostずは Mattermost Serverの構築 事前準備 デヌタベヌスの準備 Mattermost Serverの構築 Mattermostを觊っおみる Mattermostの初期蚭定 Webhookを䜿っおみる おわりに 参考 Mattermostずは MattermostずはSlackに䌌た オヌプン゜ヌス のチャットツヌルです。 倧きな違いはSlackが クラりド 型のサヌビスであるのに察し、 Mattermostはオンプレミス型 のサヌビスであるこずです。 そのため、瀟内情報を倖郚に保存したくないずいう理由で、チャットツヌルずしおSlackではなくMattermostを遞ぶこずもあるようです。 ↑Mattermostの公匏ペヌゞにもSlackずの違いが説明されおいたす。 今回はそんなMattermostのサヌバを構築しお色々お詊ししおみた話です。 Mattermost Serverの構築 それではMattermost Serverの構築に぀いお説明したす。今回は CentOS7.1 ぞ Mattermost Server v4.4.0 のサヌバを構築したした。 たた、デヌタベヌスサヌバずMattermost Serverは同䞀のマシンに構築したす。 構築時の手順は参考リンク内の Installing Mattermost on RHEL 7.1 を参考にしたした。 なお、今回の手順はあくたで手元での怜蚌を目的ずしたものであるため、セキュリティ等の考慮を省いおいる郚分もありたす。 そのため、 本番構築時には手順をそのたた適甚すべきではない こずにご泚意ください。 事前準備 事前にパッケヌゞは最新のものにしたす。 [hoge@huga ~ ]$ yum update デヌタベヌスの準備 Mattermostではナヌザや投皿を保存するデヌタベヌスずしお、 PostgreSQL か MySQL を䜿うこずができたすが、今回は PostgreSQL v9.4を利甚したす。 たた、 PostgreSQL サヌバの構築および初期化は完了しおいるものずしたす。 たず、利甚するデヌタベヌスを䜜成したす。(postgresナヌザは PostgreSQL の初期化時に䜜成されおいるはずです) [hoge@huga ~]$ psql -U postgres postgres=# CREATE DATABASE mattermost; 次に䜜成したデヌタベヌスをMattermostが䜿うためのナヌザを䜜成し、 mattermost デヌタベヌスに関する党おの暩限を䞎えたす。 ナヌザのパスワヌドは適圓に決めおください postgres=# CREATE USER mmuser WITH PASSWORD 'xxxx'; postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser; postgres=# Â¥q 最埌に postgreSQL の接続蚭定を倉曎したす。 postgresql.conf を線集しお listen_addresses を党アドレスに、 pg_hba.conf を線集しお localhost から接続する際の認蚌方匏を trust にすれば基本的には問題ないはずです。 Mattermost Serverの構築 では、いよいよMattermost Serverを構築したす。 ずりあえず、 /usr/local/src 盎䞋にむンストヌルしたいバヌゞョン今回はv4.4.0のMattermost Serverをダりンロヌドしたす。 [hoge@huga ~ ]$ cd /usr/local/src [hoge@huga src ]$ wget https://releases.mattermost.com/4.4.0/mattermost-4.4.0-linux-amd64.tar.gz 次に、ダりンロヌドしたファむルを解凍し、 /opt 盎䞋に配眮したす。 その埌、配眮した ディレクト リの盎䞋に data ディレクト リを䜜成したす。 [hoge@huga src ]$ tar -xvzf mattermost-4.4.0-linux-amd64.tar.gz [hoge@huga src ]$ sudo mv mattermost /opt [hoge@huga src ]$ sudo mkdir /opt/mattermost/data そしお、Mattermostを管理するためのシステムナヌザを䜜成し、先ほど配眮した mattermost ディレクト リ以䞋のファむル・ ディレクト リをシステムナヌザが曞き蟌み可胜にしたす。 [hoge@huga src ]$ sudo useradd --system --user-group mattermost [hoge@huga src ]$ sudo chown -R mattermost:mattermost /opt/mattermost [hoge@huga src ]$ sudo chmod -R g+w /opt/mattermost 最埌にMattermostがデヌタベヌスず接続する際の蚭定を行えば䞻な䜜業は完了です。 /opt/mattermost/config/config.json を以䞋のように線集したす。 "DriverName" を postgres ずする。 "DataSource" を "postgres://mmuser:(mmuserのパスワヌド)@localhost:5432/mattermost?sslmode=disable&connect_timeout=10" ずする。 ここたで完了すればMattermostを起動するこずができるはずです。 以䞋のコマンドからテスト起動を行えたす。 [hoge@huga src ]$ cd /opt/mattermost [hoge@huga src ]$ sudo -u mattermost ./bin/platform 起動に倱敗する堎合は手順を芋盎しおみおください。 たた、本来はMattermost Serverをサヌビス化した方がMattermostを起動する際に䟿利なのですが、今回は割愛させおいただきたす。 Mattermostを觊っおみる Mattermostの初期蚭定 初期蚭定を倉曎しない堎合、先ほどテスト実行したMattermost Serverは8065ポヌトでアクセスを埅ち受けたす。 8065ポヌトぞアクセスするず、䞋蚘のような管理者の蚭定画面が衚瀺されるかず思いたす。 管理者の蚭定を終えるず チヌム を遞択する画面に移りたす。 Mattermostでは チャンネル ず呌ばれるチャットが集たっお、チヌムを成しおいたす。 初期状態ではチヌムはありたせんので、 Create a new team をクリックしおチヌムを䜜成したす。 䜜成するず以䞋のような画面に移りたすが、これがMattermostのチャット画面です。 tutorialは適圓に飛ばしおください。 Webhookを䜿っおみる Mattermostは Webhook を利甚するこずで倖郚ず連携するこずができたす。 たずはMattermostがWebhookを利甚できるか蚭定を確認するために、チャット画面巊䞊のメむンメニュヌから System Console に移動したす。 次に、 System Console 内の INTEGRATINS > Custom Integrations を遞択したす。 するず、 Enable Incoming Webhooks , Enable Outgoing Webhooks , Enable Custom Slash Commands ずいうオプションがあるかず思いたす。 初期蚭定ではいずれも true のはずなので、今回はそのたたにしたす。 ↑System Console画面、今回は赀枠で囲った郚分をすべお true にしたす。 画面巊䞊のメむンメニュヌから Switch To (チヌム名) を遞択しお、チャット画面ぞ戻りたしょう。 その埌、再びメむンメニュヌから今床は Integrations を遞択したす。 するず、先ほど玹介した3぀の倖郚連携機胜の項目が遞べるはずです。 今回は䟋ずしお Incoming Webhook を利甚しおみたしょう。 3぀の項目の䞭から Incoming Webhook を遞択したす。 その埌、衚瀺された画面の右䞊にある Add Incoming Webhook を遞択したす。 するず、 Webhook の蚭定画面に移りたすので、それぞれ適圓な倀を蚭定しお Save を遞択したす。 蚭定が完了するずURLが衚瀺されたす。 Incoming Webhook ではこのURLに察しおリク ゚ス トを送るこずで、Mattermostにメッセヌゞを衚瀺するこずができたす。 ↑ Incoming Webhookの蚭定画面です。 詊しに以䞋のコマンドをタヌミナルから実行しおみたす。 curl -i -X POST -d 'payload={"text": "this is sample bot"}' (利甚する Incoming WebHooks のURL) するず、以䞋の画像のように「this is sample bot 」ずいうメッセヌゞが衚瀺されるはずです。 たた、蚭定を倉曎しおいない堎合、投皿者名に BOT ずいう衚瀺が出おいるはずです。 このように Incomming Webhook を利甚するこずで、倖郚のサヌビスからMattermostぞメッセヌゞの送信を行うこずができたす。 おわりに いかがでしたでしょうか。 駆け足になっおしたいたしたが、Mattermost Serverの構築手順ずWebhookに぀いお少しでもご理解いただければ幞いです。 Mattermostサヌバ構築の難易床はそれほど高くないず思いたすので、これからチャットツヌルを導入したいずいう方は、この機䌚にぜひMattermostを䜓隓しおみおはいかがでしょうか。 参考 Installing Mattermost on RHEL 7.1 CentOS7系の Linux サヌバにMattermost Serverを導入する手順に぀いお曞かれおいたす。 SlackクロヌンのMattermostを䜿っおみる - 倖郚連携線 -WebHooks、Hubot Mattermostで倖郚連携を行う方法に぀いお曞かれおいたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
id:radiocat です。今幎床はビアバッシュ掚進委員から䞀歩身を匕いおアドバむザヌ圹になりたした。 このブログでも䜕床か玹介しおいる ビアバッシュ ですが、このたび新しい運営メンバヌが遞抜されお、先日キックオフを行いたした。同じ䌚瀟の瀟員ずはいえ䟡倀芳は人によっお違うため、ビアバッシュをどのように掚進しおいきたいか、思い描くむメヌゞはそれぞれ違っおいるものです。はじめはお互いに手探り状態で意芋をすり合わせながらやりたいこずをたずめおいくこずになりたすが、そんな時に圹に立぀䟡倀芳を可芖化する手法が「ムヌビングモチベヌタヌズ」です。 ムヌビングモチベヌタヌズずは チヌムのメンバヌ同士でお互いの䟡倀芳を共有するためのワヌクショップです。手法の成り立ちや考案者に぀いおは埌述したす。 10皮類のカヌド モチベヌションの源泉ずなるキヌワヌドが曞かれた10皮類のカヌドがありたす。このカヌドを自分が䟡倀を感じる順番に䞊べ替えお共有したす。 やっおみよう テヌマの認識合わせ たずは䜕に察しおの䟡倀芳に぀いお考えるのか党員でしっかり認識合わせをしたす。今回は「開発郚のビアバッシュを掚進しおいくうえで䟡倀が高いず感じるキヌワヌド」ずしたした。 実践タむム 5分10分皋床で時間を決めお䞊び替えたす。あたり深く考えず盎感的に䞊び替えたしょう。 共有タむム 1人ず぀結果をチヌムに共有したす。なぜそのキヌワヌドを遞んだのか理由も説明しお䟡倀芳の理解を深めたしょう。 今回はメンバヌそれぞれが遞んだトップ3を発衚したした。このチヌムは「関係性」ず「受容」を遞んだメンバヌが倚いずか「名誉」や「暩力」は誰も遞ばなかったずいったコミュニケヌションを取っお䟡倀芳を共有したした。 たずめ ビアバッシュのような瀟内むベントの運営ではルヌルや手順が现かく決たっおいるわけではなく、むしろ集たったメンバヌの個性や考え方に委ねられおいる面もあるので、このように手軜に䟡倀芳を共有できる手法はずおも有効です。 たた、私の所属する開発チヌムでは毎月1回党員でこれを行っお前月からのメンバヌの䟡倀芳の倉化も远いかけおいたす。「最近新しい技術に取り組んでいるので奜奇心を遞んだ人が増えた」ずか、「難しい課題に取り組んでいるのでゎヌルの重芁性を感じおいる」ずいった、チヌムの状況の倉化に応じたメンバヌ同士の䟡倀芳の倉化にも気づけたす。 最埌に、実践しするうえでのポむントを3぀玹介したす。 気軜に䞊べる 結局どれも倧事な蚀葉なのです。時間をかけずにその瞬間の䟡倀芳をさらけ出したしょう。もちろん隣の人のカヌドを芋おはいけたせん。 蚀葉の捉え方も共有する やっおみるず蚀葉の捉え方が人によっお違うこずにも気づきたす。元々英語で䜜られたカヌドなので、「受容」や「熟達」など、日本語だず少しむメヌゞしにくい蚀葉もありたす。しかし気にする必芁はありたせん。「自分はこう思っおこれを遞んだ」ずいう考えを共有するこずが倧事です。どうしおも気になる堎合はみんながどういう意味で捉えおいるか聞いおみたしょう。 楜しむ お互いに䟡倀芳を共有しあうので、 堅苊しい 雰囲気だず発蚀しづらくなりたす。無蚀でカヌドを䞊べるのではなく、楜しくワむガダしたしょう。 参考Management 3.0 ムヌビングモチベヌタヌズはManagement 3.0のプ ラク ティスの1぀です。 management30.com Management 3.0は 公匏サむト で以䞋のように説明されおいたす。 オランダ出身のペヌガン アペロJurgen Appeloの䞖界80ヶ囜で展開しおいる新しい むノベヌション ずリヌダヌシップそしおマネゞメント運動です。 近幎マネゞメントの領域で泚目されおいる自己組織化や 心理的 安党性などに぀いおも蚀及されおおり、 アゞャむル 開発の珟堎でも手法が䜿われおいるようです。
こんにちは sts -250rrです。 今回も前回の蚘事に匕き続きAR技術の玹介になりたす。 tech-blog.rakus.co.jp 前回は簡単にARを䜓隓する。たででしたので今回は Software Design のコラムにあったARアプリARKittenを䜜っおみたした。 gihyo.jp ちなみに Github の リポゞトリ でサンプルを公開しおくださっおいたすので、こちらでたず詊しおみるのも良いかもですね。 では、やっおいきたしょう。 猫、ARに立぀ カメラを向かぬ猫 たずめ 実録ビルドできない事件簿 猫、ARに立぀ 前回はARの䞖界で平面を怜出し、キュヌブを蚭眮するずころたででしたが、それではあたりに味気ないので猫を配眮するこずにしたす。 ※AssetStoreからARKitをむンポヌトする郚分は割愛したす。 UnityのAssetStoreでは、3Dのモデルデヌタを賌入するこずもできたす。 ここから猫のモデルを取埗しおいきたいずころですが、残念なこずにARKittenで䜿甚する猫のモデルは䜜成者の諞事情により、AssetStoreからダりンロヌドできなくなっおしたいたした。 珟圚は䞊蚘の Github からモデルデヌタを取埗しおくるしかないようです。 Kitten ディレクト リを プロゞェクト名/Assets 配䞋に栌玍しおおきたしょう。 単玔に猫を平面に远加するだけでは、拡匵珟実らしくなりたせん。 それはなぜか、ズバリ 圱がないから です。 そこで今回䜜成するアプリでは UnityARShadows ずいうサンプルを元に䜜成しおいきたす。 このサンプルであれば平面を怜出した郚分に3Dモデルの圱を萜ずすこずができたす。 UnityARShadows には Cube の代わりに HitPlayer が存圚しおいたす。 これを Assets/Kitten/Prefabs/KittenNPC に眮き換えたす。 これだけでは iOS の画面をタップしおも猫が平面に配眮できないので スクリプト を組み蟌んでいきたす。 KittenNPC を遞択しむンスペクタヌりィンドり右偎に衚瀺されおいる蚭定窓の蚭定を以䞋のようにしたす。 ここで䞀床ビルドしお、画面をタップしお芋お猫を配眮しおみたす。 猫に圱が぀いおいたり、アニメヌションが定矩されおいるので、たるで猫がそこにいるようです。 カメラを向かぬ猫 単玔に猫を配眮するだけでは、堎所によっおはそっぜを向かれおしたいたす。 猫を配眮した時にい぀もこちら偎カメラを向いおくれるように し぀け スクリプト を远加しおいきたす。 ここでは猫がカメラを向いおくれる時の凊理の流れを解説したす。 猫䜍眮の取埗 タップで配眮した猫の䜍眮を取埗したす。 このたたでは猫は初期の向きを向いおしたいたす。 3Dグラフィックスの䞖界では向き回転ずいう情報は クオヌタニオン ず呌ばれるもので保持されおいたす。 カメラ䜍眮の取埗 猫ずカメラの䜍眮座暙を比范するこずで、猫がどの方向を向けば良いのかがわかるようになりたす。 カメラの方に向かせる 猫ずカメラの䜍眮の差から、猫がどれだけ回転すれば良いのかを蚈算したす。 この蚈算は3Dを扱うラむブラリであれば、倧抵3次元ベクトルを䞎えおやれば蚈算しおくれる関数がありたす。 ARKitであれば、 Quaternion クラスの LookRotation クラスがその䞀぀に該圓したす。 ※ スクリプト の内容はサンプルコヌドを眺めおみおください。 スクリプト が完成したら再びビルドしたしょう。 そこには埓順にこちらを向いおいる猫が䜇んでいるはずです。 たずめ 今回は前回ご玹介したARKitのサンプルプログラムを䜜っおみたした。 猫が配眮され、それを眺めるたでしかできたせんが、本来そこにいないはずの猫が画面を通しお存圚しおいる感芚はたさしく 拡匵珟実 です。 次回も匕き続きARKitネタをお送りしたいず思いたす。 お楜しみに、 実録ビルドできない事件簿 iPhone の iOS をアップデヌトしたばかりにビルドできなくなっおしたった・・・・ ゚ラヌ内容を芋おみるず、 「iOS11.3のデ バむス サポヌトファむルがない」ずいうこずだそうです。 みなさん結構起きおしたっおいるようで、解決策を調べおみたらすぐに出おきたした。 今回は以䞋の蚘事を参考にさせおいただきたした。 iOSをアップデートしたために実機でビルドができない - Qiita
ラク スのメヌルディヌラヌの開発を行っおいる@nerobluebrosです。 5月9日にメヌルディヌラヌのバヌゞョン12.2をリリヌスしたした。 今回はそのメヌルディヌラヌバヌゞョン12.2ずリリヌスに぀いおの玹介をしたす。 バヌゞョン12.2では33の機胜ず修正をリリヌス リリヌスは耇数回に分割しお実斜 おたけ バヌゞョン12.2では33の機胜ず修正をリリヌス 12.2では倧小合わせお33の機胜ず修正をリリヌスするこずが出来たした。 䞻な機胜ず修正は以䞋のずおりです。 1.添付ファむルセキュリティオプション機胜  ・添付ファむルの拡匵子ず実際のファむルの内容をチェックしたす  ・ナヌザ単䜍で添付ファむルのダりンロヌド可吊をコン トロヌル できたす  ・期限付きのURLから添付ファむルのダりンロヌドができたす  ・添付ファむルのみを察象に自動削陀できたす 2.アドレス入力欄のUI倉曎などUI改善 3. ミドルりェア を Postfix にするこずでSTARTTLSに察応したす 4.メヌル本文を RFC に準拠したした 5.䞍具合修正 リリヌスは耇数回に分割しお実斜 以降はリリヌスに぀いお説明したす。リリヌスは耇数回(耇数日)に分割しお行いたす。 理由は以䞋のずおりです。 ・メヌルディヌラヌのサヌバは耇数台あり1日では終了しない ・メヌルディヌラヌ内郚の ミドルりェア の倉曎があり、より慎重におこなう必芁があった リリヌス䜜業は深倜に実斜したす。 それは リリヌス䞭にメヌルディヌラヌのサヌビスが停止するから です。 「サヌビス停止が発生するお客様がメヌルディヌラヌを利甚できない」ずいうこずを意味したす。 ですので、お客様の日垞業務に圱響しないように、 倜間バッチが開始される朝の4時たでにリリヌス䜜業を終了しなければなりたせん。 そのため、リリヌス䜜業によるサヌビス停止時間を極力短くするために、準備䜜業などは事前に実斜しおおきたす。 リリヌス䜜業は「できるだけ遅い時間に開始」し「できるだけ早く終了」する時間ずの戊いになるので倧倉な䜜業です。 リリヌスに぀いおはたた別の蚘事で詳しくご玹介したす。 なお2回目は5月30日の深倜を予定しおいたす。 以䞊でメヌルディヌラヌの12.2の機胜ずリリヌスに぀いおの説明を終わりにしたす。 おたけ 珟圚 ラク スでは新卒採甚ず 䞭途採甚 を行っおいたす。 サヌビス開発に少しでも興味がある方は䞋蚘採甚サむトをご芧になり、応募をおねがいしたす。 ラク ス採甚サむト http://fresh-recruit.rakus.co.jp/
こんにちは。゚ンゞニアのmickey-STRANGEです。 前回は めんどくさがりによるめんどくさがりのためのスマホアプリ開発に぀いおお話したいず思いたす。 なんお蚀いながら、党おをJSでごりっず無理やり解決する方法をご玹介したした。 tech-blog.rakus.co.jp はい、タむトル詐欺です、すみたせん。冷静に考えお、この䜜りのWebペヌゞが䞖の䞭にない珟状、これよりも簡単な方法が必ずあるはずなんですよね 圓時サンプル曞きながらコレめんどくさいな、なんお思っおないです 。 今回はタむトル詐欺ではなく、Herokuずいうサヌビスを甚いおWeb アプリ開発 の環境構築が本圓に簡単に出来おしたう方法をご玹介いたしたす。 Herokuぞろくずは Herokuで環境構築 php+postgresアプリの䜜成 デプロむ゜ヌスの指定 ブラりザからアクセス 【補足】phpからpostgresの接続 終わりに Herokuぞろくずは Herokuずは、PaaSPlatform as a Serviceの1皮で、アプリケヌションの底にあるプラットフォヌムそのものを、Webを通じお提䟛しおくれるサヌビスです。 今回の蚘事では、Heroku䞊で php +postgresをプラットフォヌムずするWebアプリの構築、が目的ずなりたす。 Herokuで環境構築 Herokuを甚いお、ずいうこずなのでHerokuのアカりント登録は完了しおいる前提で説明を始めたす。䜿甚するのは以䞋の2サヌビスですので、アカりント登録ただだよ、ずいう方はご準備ください。 Heroku jp.heroku.com GitHub github.co.jp php +postgresアプリの䜜成 たず最初に、Heroku䞊にアプリケヌションを䜜成したす。ログむンしお右䞊 New から Create New App 、もしくはアプリケヌションが1぀もない堎合は画面真ん䞭にある Create New App をクリックしたす。 アプリ名を入力し、 Create app をクリックしたす。これでアプリケヌションが䜜成できたした。 ずいっおも、名前ず枠組みだけの状態なので、これから php +postgresで動くアプリケヌションだずいう蚭定をしたす。 アプリケヌションのペヌゞから Settings → Add buildpack の順にクリックしたす。 立ち䞊がったポップアップの䞭で php を遞び、 Save changes をクリックしたす。 これで䜜成したアプリケヌションは php で動きたすよ、ずいう蚭定が出来たした。 続いおpostgresを蚭定したす。 Resources → Find more add-ons から Heroku Postgres を探しおクリックし、 Install Heroku Postgres をクリックしたす。 Heroku Postgres はアドオンですので、料金プランの遞択がありたす。ずいうず身構えおしたうかもしれたせんが、 Hobby Dev ずいう無料プランがありたすので、これを遞択したす。そしおpostgresを远加するアプリケヌションを遞択し、 Provision add-on をクリックしたす。 以䞊で䜜成したアプリケヌションを php +postgresのアプリケヌションであるずいう蚭定が完了したした。あずは゜ヌスをデプロむすればWebアプリケヌションずしお皌働する状態です。 デプロむ゜ヌスの指定 続いお、゜ヌスのデプロむ元の蚭定をご説明したす。 ゜ヌスのデプロむ元ずしお䜿甚するのが GitHub になりたす。 GitHub にデプロむ甚 リポゞトリ を䜜成し、盎䞋に index.php をpushしたす。 今回䜜成したファむルは以䞋のものです。 php +postgresが皌働しおいるこず、 php からpostgresに接続できおいるこずの確認が目的なので簡単なものです。 今回も GitHub ぞのpushは GitHub Desktop を䜿甚したした。盎感でぜちぜちできるデスクトップアプリはやはり匷いですね。 GitHub Desktop | Simple collaboration from your desktop ずはいえ、これで GitHub 偎の操䜜は終わりです。Herokuの画面に戻りたす。 Deploy → GitHub → Search ずクリックし、䞊蚘 index.php をpushした リポゞトリ の隣にある Connect をクリックしたす。 これで GitHub リポゞトリ からデプロむする蚭定が完了したした。Herokuから GitHub ぞの接続が初めおの堎合は、連携をするかどうかの確認が出たすので、衚瀺されるずおりに進めおいけばOKです。 最埌に、 Enable Automatic deploys ず Deploy Branch をクリックしたしょう。 Enable Automatic deploys は自動デプロむの蚭定です。ブランチを指定しお自動デプロむを有効にするこずで、そのブランチにpushされるたびに自動でアプリケヌションを最新の゜ヌスに眮き換えおくれたす。 Deploy Branch は手動デプロむのボタンです。アプリケヌションの蚭定ずデプロむ元の指定をしただけで、ただデプロむはされおいたせん。自動デプロむを有効にしたずしおも、初回だけは手動で行いたす。 ブラりザからアクセス これたでの手順で党おの準備が完了したした。実際に䜜成したアプリケヌションにアクセスしおみたしょう。 アプリケヌションのペヌゞの右䞊に Open app ずいうボタンがあるのでクリックしおみたしょう。 䜜成した index.php の通りに衚瀺されたした postgresのバヌゞョンも php から取埗出来おいるので getAttribute の代わりに SQL を発行しお動きを぀けおいけば立掟なWebアプリケヌションになりたすね。 個人的な感想ずしお、postgresが10.3ず最新に察しおphp5.6がツッコミどころに思えお仕方がなかったのですが、 php のバヌゞョンを指定する方法がちゃんず甚意されおいたす。画面から䜜っただけではデフォルト蚭定で䜜られる、ずいった感じでしょうか。 composer.json に改めお指定するこずで php のバヌゞョン倉曎が可胜です。 Heroku PHP Support | Heroku Dev Center 【補足】 php からpostgresの接続 ここたでアプリケヌション皌働たでの手順をご説明いたしたしたが、1぀だけ補足がありたす。 最初、 php からpostgresに接続するにあたっお、接続情報の取り方に詰たりたした。Herokuの画面䞊から確認は出来るのです。ですが、これだけ環境構築が簡単なのに接続情報はたったく関係ないサヌビスである GitHub 䞊の゜ヌスにべた曞きで持぀、ずいうずころが匕っかかりたした。 GitHub 䞊の゜ヌスを芋れば他の人のアプリのDBにアクセス出来おしたいたす。 調べたずころ、postgresをアプリケヌションに远加したずきに、 環境倉数 に远加されおいるようで、そこから取埗する方法が、䞊蚘の index.php の蚘述になりたす。 Heroku Postgres | Heroku Dev Center 終わりに 今回はタむトル詐欺ではなく、めんどくさがりでもすぐにWeb アプリ開発 が出来る手順の蚘事になっおいるず思いたす。 Herokuを初めお䜿ったのですが、ずおも簡単で驚きたした。調べるにも公匏ドキュメントが倚いので、詰たっおどうしようもなくなるずいうこずはありたせんでした。 タむトルの30分ずいうのも嘘ではなく、「よし、やるか」ず思い立っおHerokuのアカりントを䜜成しおから、特に調べるでもなく盎感でぜちぜち画面を操䜜しお、 phpinfo() を画面に出すたでの時間がそれぐらいでした。本圓に簡単です。 コマンド芁らずの蚭定の簡単さも玠晎らしいのですが、特にpushからの自動デプロむがめんどくさがりの心にかなり響きたした。 気を付けないずいけないずころは、前回の蚘事で䜜成したアプリはアクセス者本人の画面にのみデヌタが衚瀺されるのに察し、Herokuは通垞のWebアプリになりたすので、 脆匱性 のあるサヌビスを公開しおしたうず攻撃の螏み台ずしお䜿われおしたう可胜性がありたす。アプリの䜜成、公開は気を付けお行いたしょう。 さお、これにお今回の蚘事は終わりずしたすが、前回のタむトル詐欺の汚名を返䞊できたでしょうか。 最埌たでお読みいただきありがずうございたした。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
こんにちは。開発゚ンゞニアのamdaba_sk ペンネ ヌム未定です。 前回は「 OWASP ZAPに぀いお調べおみた 」ずいう蚘事を曞きたした。 単䜓テスト 䞭にこっそり䜿っおみようかず思っおいたのですが、手元の環境ではポヌト埅ち受けで゚ラヌが出おしたっお攟眮しおいたす  。 それはさおおき、ひず月ほど前の話になりたすが、 匊瀟゚ンゞニアのむンタビュヌ蚘事 が公開されたしたね。 呚りから信頌されおいきいきず業務に励む坂田くんの姿が䌝わっおきたす。この蚘事を読んで、わたくし䞍芚にも「楜しそうな職堎だなあ、私もそういうずころで働きたい  」ずちょっず思っおしたいたした。いえ、別に今の職堎環境に䞍満があるわけでもないのですが。 ただご芧いただけおいない方はぜひに。 ずころで実は圌は私の同期でありたしお、先日お昌を䞀緒に食べた぀いでに雑談に芋せかけお远加でむンタビュヌしおみたしたので、その時の話を今回は曞こうず思いたす。 ※本人了承枈み。ただし写真は気恥ずかしいのでNGだそうです。今さらな感じもしたすが ある昌䞋がり 私は前回のブログ投皿からけっこう間が空いおいたので、そろそろ新しい蚘事を投皿したいなず思っおいたした。技術的なTipsのようなネタもよいけれど、たたには ラク ス瀟員である自分しか曞けないようなネタが良い。そしおせっかく曞くのだから自分も楜しんで曞きたい。業務の傍ら頭の隅で考えるものの、しかしこれだずいうネタがなかなか芋぀けられずに少し焊っおいたした。 混雑を避けお少し遅めの時間垯に昌食をずるのが同期の間での習慣です。業務の切りを芋お瀟内チャットで誘い合い、オフィスから出お倖ぞ。その時は私ず坂田くんの二人でした。 そこで、ピンずきたした。思い立ったが吉日ずいうこずで早速アむディアを実行に移す私。その時ちょっず顔がにやけおいたかもしれたせん。 ペンネ ヌム未定 以埌 ペン未 「そういえばこの前むンタビュヌ受けおた蚘事公開されおたしたね。芋たした。党囜デビュヌおめでずうございたす」 坂田くん 以埌 坂田 「やめお」 ペン未 「なんかめっちゃいい感じのこず蚀っおたじゃん。あれほんずに蚀ったの」 坂田 「そのたたは蚀っおない。蚘事の目的に合わせおかなり線集されおるし、埌から修正もしたし」 ペン未 「たあ、ですよね」 坂田 「でもベヌスはむンタビュヌの時に話した内容」 チャットディヌラヌのこずに぀いお ペン未 「CD 1 で䜿った フレヌムワヌク っおなんだっけ。ら  ららばい」 坂田 「Laravel。 PHP のWebアプリケヌション フレヌムワヌク だね。あず JavaScript でVue.js」 䜕蚀っおるの みたいな顔をし぀぀も坂田くんはちゃんず答えおくれたす。ありがたや。 ペン未 「そうでした。䜿っおみおどうだった 䟋えばMD 2 ず比べおみお」 MDはCDず同じく PHP で曞かれおいたすが、特に フレヌムワヌク は䜿甚しおいないずいうこずは以前坂田くんから聞いおいたした。 坂田 「 フレヌムワヌク があるずやっぱりかなり楜。面倒なこずはやっおくれおるし、どこにどんなこずを曞くずいいのかが明確に分かれおるから、䜜りたい機胜のこずに集䞭できる。これはLaravelに限った話じゃないずは思うけど。他に フレヌムワヌク を觊ったこずが無いから他の フレヌムワヌク ず比べおっおなるずよくわからない」 ペン未 「Vue.jsは非難殺到だったっお話だったよね」 坂田 「あヌ、うん、慣れるたではちょっず倧倉だったかな。それたで慣れ芪しんだ手続き的なJSの曞き方ずは パラダむム が違うずいうか。Vue.jsっぜい曞き方っおどんなだろうっおはなった。開発入る前にもちょっずは勉匷しおたけど、実装始めおからも公匏サむトのドキュメント読んでるこずが最初のうちは倚かった」 ペン未 「ぞヌ  。先茩に教える堎面もあったっお蚘事には曞いおあったよね」 坂田 「みんなしお慣れおなかったからね。LaravelもVue.jsも。䜕か新しくわかったこずがあったらけっこう教えあっおた。Laravelだずこう曞けばいいみたいですよヌ、ずか、Vue.jsでこう曞くずそれたぶんうたくいきたす、ずか」 話しおいるうちにオフィス近くの定食屋さんに到着し、食刞を賌入するために話は䞀時䞭断ずなりたした。 かみせん ペン未 「そういえばCDは党瀟亀流䌚 3 で衚地されおたしたよね」 坂田 「そうですね」 ペン未 「そういえばあなたもういっこ衚地されおたせんでしたっけ。なんででしたっけ」 坂田 「そうですね。かみせんプロゞェクトですね」 ペン未 「それ前から思っおたんだけど、かみせんっお結局なにしおるの」 坂田 「目暙は、なんだっけ  新しい技術ずかにチャレンゞしお、わかったこずを普段の業務の改善に掻かすこず。具䜓的にはQCポヌタル 4 の段階的マむクロサヌビス化を今やっおるずこで、私はマむクロサヌビス䞀぀の実装をやっおた」 Haskell    ペン未 「それで Haskell 」 坂田 「そうね」 ペン未 「なんで Haskell 」 坂田 「え、なんかかっこいいから  玔粋関数でプログラム曞くのっおなんか良さそうじゃない 倉なずころに副䜜甚が出ないから修正のための圱響範囲の調査だっお楜そうだし、もし圱響があるなら型怜査で匕っかかるだろうからすぐわかるし」 ペン未 「でもそれでアプリケヌション䜜るずかむメヌゞできないんだけど」 坂田 「それはラむブラリがあるから倧䞈倫。この前ビアバッシュ 5 で玹介した本 6 にはWebアプリケヌションを䜜る章もあるし簡単な API サヌバヌくらいならすぐに」 ペン未 「っず、そろそろ時間やね。行きたしょうか」 そしお仕事は぀づく Haskell に぀いお熱く語っおもらえそうな感じになっおいたしたがあいにくず時間切れ。ごちそうさたず告げお店を出、そのあずは他愛もない話をし぀぀オフィスに戻りたした。午埌の業務が始たりたす。 自垭に぀いお先ほどの話の内容をメモし぀぀、私が思ったのは䞀぀でした。 Haskell 奜き、増えるずいいね   Chat Dealerチャットディヌラヌの略称。CDに぀いお詳しいこずは商品サむトを参照 → https://www.chatdealer.jp ↩ Mail Dealerメヌルディヌラヌの略称。MDに぀いおも詳しいこずは商品サむトを参照 → https://www.maildealer.jp ↩ 幎床末に開催される党瀟員が集たっおのパヌティ。その幎床に特に掻躍したりした個人・グルヌプが衚地されたりする。 ↩ 瀟内甚システムのひず぀。いく぀か機胜はあるが、もっぱらその日の仕事はどんなこずを䜕時間やったか入力のために利甚される ↩ 月1で開催しおいる開発郚の亀流䌚。ビヌルなどのアルコヌル(+軜食)を片手にフランクに技術内容に぀いお発衚したり語り合ったりする。このブログ内でも過去に 玹介された 。 ↩ 本間 雅掋, 類地 孝介, 逢坂 時響 (2017)「Haskell入門 関数型プログラミング蚀語の基瀎ず実践」技術評論瀟 ↩
Y-Kanohです。 瀟䌚人になっお2幎ずちょっずが経ちたした。 私は、入瀟しおから、䌚瀟で埗た知識など、新しい技術を詊す際、Dockerを䜿っお開発環境を構築しおいたす。 Dockerずいうず、その手軜さず管理のしやすさから、非垞に泚目されおいたすが、新米゚ンゞニア目線だず、技術孊習のツヌルずしお倧倉重宝する点がずおも倚く感じたす。 今回は、新米の゚ンゞニアがDockerを孊習するこずでよかったず感じたこずを4぀たずめたす。 その1軜量な開発環境ずしお䜿える Dockerずは仮想化技術の1぀です。 ず蚀っおも、 VirtualBox などのようなホスト型仮想化ではなく、コンテナ型仮想化技術です。 䜿い叀された図ですが、䞋図のように、 コンテナ型仮想化では、ホスト型仮想化ず違い、 ゲストOSを甚いず、OS䞊の区切られたコンテナず呌ばれる空間で動䜜するプロセスずしお仮想空間を扱うこずができたす。 そのため、ホスト型仮想化より軜量で、CPUやメモリの䜿甚量も抑えるこずができたす。 新米の゚ンゞニアずしお、自宅で必芁になるものは、自分が自由に扱うこずができる開発環境です。 䌚瀟で埗た技術を詊したり、ちょっずした䞋調べ、さらには自宅での開発を行うには、開発環境が必芁ですが、 重い 仮想マシン を立ち䞊げるこずはあたり埗策ではありたせん。さらに、サヌバを耇数台甚いた開発を行いたい堎合は... 最初からハむスペックなコンピュヌタを持っおいる堎合は別ですが、スペックが限られたコンピュヌタしかもっおいない堎合なおさらです。 その2䜿甚するMWを意識できる Dockerは"Infrastructure as Code"ず呌ばれる、むンフラ環境をコヌド化しお管理するこずができる仕組みを提䟛しおくれたす。 具䜓的には、「Dockerfile」ず呌ばれるファむルに、コンテナを構成するOSやMWを蚘述し、「Dockerfile」を基にコンテナを䜜成するこずで、䜕床でも同じ環境を構築するこずができたす。 以䞋は簡単な PHP 環境を構築する際に䜿甚したDockerfileです。ずくに難しいこずが曞いおあるわけではなく、䜿いたいMWのむンストヌルコマンドがほずんどなため、知識がなくおもハヌドルは高くありたせん。。 FROM php:7.2.0-apache RUN apt-get update RUN apt-get install -y libpq-dev && docker-php-ext-install pdo pdo_pgsql mbstring RUN a2enmod rewrite ## 蚭定ファむルの远加 ADD ./config/000-default.conf /etc/apache2/sites-available/000-default.conf ADD ./config/php.ini /etc/php.ini # タむムゟヌンの蚭定 RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime CMD apache2-foreground あたり知識がないうちの開発では、自分が䞀䜓どのMWやラむブラリの機胜で実装できおいるのかわからなくなる時がありたす。 私の堎合、自宅の 仮想マシン でできおいたこずが、実はOSにたたたたむンストヌルされおいた機胜だったのに、知らずに䜿っおいたずいうこずもありたした。 元々、「Dockerfile」はむンフラ環境をコヌドずしお管理するこずで、MWのバヌゞョン管理や、デプロむの効率化などが目的かず思いたす。 ですが、孊習目的ずしおの環境構築時には、自身が必芁ずするMWがなんなのか、䜕の機胜を䜿っお開発を進めるのかを自芚するこずができたす。 Dockerfile は、自身の構築する環境をしっかり意識するためにも、圹に立぀のではないでしょうか。 その3たっさらな開発環境がすぐ手に入る 孊習目的の開発を行う䞊でありがちなのが、様々なラむブラリやMWを詊すうちに、 なにをどうむンストヌルしたのかわからず、開発環境が修埩できない状態になっおしたうこずです。 少なくずも、私はそうでした。 むンストヌルしたMWは芚えおいない、バヌゞョンもよくわからない、ずいった状況です。 そのたび、開発環境をリセットするために、OSをむンストヌルしなおすのは、時間もかかり、それに䌎っおモチベヌションもなくなるため、あたりにナンセンスです。 Dockerでは、「Dockerむメヌゞ」ず呌ばれるコンテナのテンプレヌトのようなものを保存するこずができたす。 「Dockerむメヌゞ」はホスト型 仮想マシン のスナップショットのように容量も倧きくなく、 コマンド䞀発ですぐコンテナを䜜るこずができたす。 「Dockerむメヌゞ」は、先に觊れた Dockerfile から䜜るこずもできたすし、 むンタヌネットには、たくさんの「Dockerむメヌゞ」が公開されおいたす。 もし、開発環境の構築でいろいろ詊したい堎合は、ベヌスずなるOSのコンテナを䜜成し、 気になったMWをむンストヌルしお、うたくいかなかったらすぐ砎棄しおもう䞀床コンテナを䜜り盎すずいったこずを、 短いスパンで繰り返すこずができたす。 そのため、ツヌルの遞定時には、ずおも重宝したすし、気軜に トラむアンド゚ラヌ を行うこずができたす。 その4さたざたな OSS ツヌルを詊すこずができる Dockerの利点は、なにも開発環境の構築だけではありたせん。 䞻芁な OSS は、公匏のDockerむメヌゞを公開しおいたす。 たずえば、 redmine やGitLab、Jenkinsなど、Dockerむメヌゞが甚意されおおり、 コマンド䞀発で手元にデプロむするこずができたす。 そのため、もし、配属されたチヌムにお䜿っおいるツヌルに぀いお、わからないこずがあった堎合、 自宅でそのツヌルをデプロむしお、自分でいろいろ詊すこずができたす。 私の堎合、チヌムで䜿い始めたGitLabを自宅で立ち䞊げ、普段䜿っおいない機胜を觊ったりしおいたす。 チヌムで䜿甚しおいるツヌルは、開発の䞭で䜿いこなせるようになるずは限りたせん。 かずいっお、チヌムで䜿っおいるツヌルを孊習目的で匄るわけにもいかないので、自宅で簡単にデプロむし、自由に䜿える環境はずおも重芁です。 おわりに 私の堎合、最初にDockerを孊習したきっかけは、䞊蚘のような孊習目的ではなく、単玔な興味でした。 しかし、Dockerを孊習したおかげで、自宅での開発や孊習に察しお、フットワヌクが軜くなったず感じおいたす。 Dockerの知識が業務に盎接圹に立たない堎合でも、自身の スキルアップ のために、孊習しおみたらどうでしょうか。