はじめに はじめまして。開発エンジニアのstrongWhiteです。 ラク スに入社して今年で2年目になります。 今回は、仕事を進めていく上で WIPを制限する大切さ をお伝えしようと思います。 堅苦しい 話にならないように、あるゲームの内容をもとにお伝えできればなと思います。 WIP WIPとは「work in progress」の略で、仕事が進行中である あるいは 仕事が完了状態ではないことを意味します。 簡単にいうと、やりかけの作業 ということになります。 突然ですが、みなさんは仕事ができる人 や 仕事が早い人と聞くと、どんな人をイメージされるでしょうか。 いろいろな仕事を同時並行的にこなしている人をイメージされますか? 実は仕事を同時並行的に行うと、かえって完了が遅くなります。 仕事ができる人 や 仕事が早い人は、 ひとつひとつの仕事を確実に終わらせる 人です。 ここが今回の記事の肝になりますので、念頭に置いておいてください。 コインゲーム 先日、社内で開催された勉強会で コインゲーム を開催しました。 このゲームはWIPを制限する大切さを実感できるゲームです。 ゲームに必要なもの コインをひっくり返す「作業者」 作業者の作業時間を計測する「管理者」 1人の「顧客」 テーブル 同じサイズのコイン20枚 ストップウォッチ(あるいはストップウォッチ機能付き携帯電話) 結果を書き出す紙 遊び方 作業者と顧客はテーブルを囲んで着席します。 1人の作業者の後ろに1人の管理者が付き、管理者はストップウォッチを持ちます。 また、顧客もストップウォッチを持ってスタンバイします。 作業者・管理者・顧客の役割はそれぞれ以下の通りです。 作業者…すべてのコインをひっくり返して、次の作業者に渡す。(最後の人は顧客に渡す。) 管理者…作業者がコインをひっくり返すのにかかった 実質作業時間 を計測する。 顧客…最初のコインが届くまでの時間とすべてのコインが届くまでの時間(最後のコインが届くまでの時間)の2つを計測する。 ゲームは3回繰り返してプレイします。 最初は20枚のコインを一括で行い、2回目は5枚ずつに分けて行います。そして最後は1枚ずつに分けて行います。 勘のいい方はこの時点で気付いたかもしれませんが、このゲームでは、コインがひとつの WIP を示しています。 3回とも全く同じようにプレイしますが、違うのは WIPが徐々に小さくなっていく ことだけです。 今回、勉強会では作業者3名、管理者3名、顧客1名の計7名でゲームを行いました。 結果は以下の通りです。 20枚 5枚 1枚 Aさん 20秒 28秒 28秒 Bさん 23秒 26秒 28秒 Cさん 21秒 28秒 29秒 最初のコイン 67秒 23秒 4秒 合計時間 67秒 42秒 31秒 ゲームから学べること WIPが小さくなるにつれて作業者の作業時間は長くなりますが、最初のコインがゴールするまでの時間と合計時間は短くなります。 つまり、同時に作業する作業項目を減らすと、リードタイムが短くなるということになります。 ひとつひとつのコインを皆さんが仕掛っている仕事に当てはめると、同時並行的に仕事をするとすべての仕事が完了するのにとても時間がかかってしまうということになります。 この点から、WIPを減らすことによる重要性が理解できるかと思います。興味がある方はぜひ周りの人とゲームをプレイしてみてください。 まとめ 今回はWIPを制限する大切さをお伝えしました。効率的に仕事を進めるには、ひとつひとつの仕事を確実に終わらせるように立ち回ったほうがいいということが少しでも伝われば幸いです。 抱えている仕事が多いと、つい気が焦って何でもかんでも手をつけてしまいがちです。ですがそのまま進めても何もかもが中途半端に終わってしまい、何ひとつ完了している仕事がないという状況に陥ります。 そんなときは今回の記事を思い出していただき、WIPを制限していま取りかかっている作業を終わらせることに集中してみてください。 参考 Marcus Hammarberg、Joakim Sunden 著 『カンバン仕事術-チームではじめる 見える化 と改善』
はじめに はじめまして。エンジニアのnorthmkyです。 ラク スに新卒で入社し、今年で2年目になります。 他エントリが技術の内容だったので少し趣向を変えて ラク スが行っている技術交流会、 ビアバッシュ を紹介したいと思います。 ビアバッシュとは "ビア"とついている通り 「ビールなどのアルコールを片手に(+軽食)フランクに技術内容について発表したり語り合う交流会」 のことを指します。 だいたい月に一度くらいの頻度で有志が集まって開催しています。 参加費は...なんと無料です。 というのも技術交流会を会社が応援してくれていまして 補助金 がでるのです。 そのおかげもあり、 ラク スでは本イベントが3年も途切れることなく続いています。 (実はここまで会社内で技術イベントが続いてる事例は少ないんだそうです) ビアバッシュの流れ 以下のような流れでやっています。 ビアバッシュ開始 お酒をたしなみつつ... 発表スタート!! (発表 + 質疑応答) x 3名ほど 発表が終わりと思いきや... 飛び入り参加枠スタート ビアバッシュ終了 発表後半になると聴いていた参加者側の人が登壇したくなり、 飛び入り参加枠で話し始める...ということが結構あります。 気になる発表内容ですが...実に幅広いです。 話題の技術を使ってみた 勉強したことを整理してみた 実務をしていて身につけたTips紹介 読んだ本(技術書あるなし問わず)の紹介 実務をしていて感じたこと・大事だと思うこと 勉強会レポート 趣味について熱く語る 新卒一年目で感じたこと などなど。 熟練エンジニアから新卒で入りたての人まで、様々な人が登壇します。 前回の様子はこちら では実際に前回ビアバッシュの様子の一部を紹介したいと思います。 開催前、司会進行のスライドです。 開催前に参加可否のアンケートをとり、発表者とそのテーマをタイムテーブルに落とし込みます。 たまに発表はじまりの前、後に個人で宣伝したいことを宣伝する時間をとることがあり、 そのときもこの資料に記載しています。 「平日毎○曜日、勉強会開催してるよー」だったり「趣味のイベント参加者募集!」だったり 技術以外の宣伝もあります。 軽食といいながらお寿司がでちゃいます。 その会の運営している人のさじ加減で内容は変わります。 写真では伝わりませんが、BGMも流しています。 テンションがあがります。 実際の発表風景です。 お気づきかもしれませんが、本ブログのTOP画像の場所、 通称「 コワーキングスペース 」にて行いました。 この写真の登壇者の発表内容は数学よりの話だったので皆さん真剣に耳を傾けています。 上記のような感じで毎月やっています。 飛び入り枠の雰囲気もお伝えしたかったのですが、自身が飛び入りをしたのでお見せする写真はありませんでした... ビアバッシュのよいところ 私が参加してみてよいなあと思うところは 「普段仕事で関わる/関わらない人にかぎらず興味深い話が気軽に聞ける」 ところかなと思います。 なかなか他部署のエンジニアの方と話す機会って業務ではなかなかないのではないかと思います。 また同じ部署でも話さなかった人って実はいたりして、そのいう方々の話を聴くと 案外自分が気になっている情報を持っていらっしゃったりして、そこからより関係性が深まることもあります。 自分の好きな技術の話になりますと、やはり発表者もイキイキした表情と声で発表しているので、 伝染して楽しい気持ちになりますし、もっと知りたい!という知識欲をかりたたせられます。 おわりに ラク スでのビアバッシュを紹介しました。 お酒が入った中自由に技術の話をする/聴くのはやはり楽しいです。 そしてこのイベントを会社が推奨してくれるのもありがたいなと思います。 これからも続いていけるようにしていきます。 実は、外部の方を招いて勉強会をしようという声も上がっています。 その時はまた周知しますので気になった方はぜひ参加してみてくださいませ。 以上northmkyからのビアバッシュ紹介でした。
はじめに はじめまして。開発エンジニアのCarboxyです。 ラク スに新卒で入社して、今年で2年目になります。 今回は、新卒(≒エンジニア初心者)が、効率の良いプログラムを書けるようになるきっかけになればと思い、プログラムの計算量の求め方とその比較方法をソート アルゴリズム (選択ソート)を例に紹介します。 計算量とは ある問題を解くためにどのくらい計算が必要かどうか(どのくらい時間がかかるか) → アルゴリズム の性能評価に使用できる。 O(オーダー)記法を用いて示す。 ※計算量には時間計算量と空間計算量があるが、この記事では時間計算量の事を指す。 O(オーダ)記法 計算量の一般的な記述方法。大まかな時間計算量を表す。 例として、入力サイズ n の関数として表される時間計算量T(n)が で与えられる場合、オーダー記法では最も次数の高い項の係数を省いて となる。なぜこのように最も次数の高い項(主要項)の係数を省くような、漸近的な評価が使われるかというと、入力サイズ n が十分に大きい場合は、時間計算量は主要項にのみ依存するからである。 選択ソート 選択ソートを例に計算量を考える。 選択ソートは最も基本的なソート アルゴリズム の1つで、次のようなア イデア に基づきソートを行っていく。 1,入力データの中から最大のデータを見つける。 2,見つけた最大のデータをソートの対象から除外する。 3, 1と2 の操作を n - 1 回繰り返す。 ソースコード 入力サイズ n の配列 D[0]、D[1]、・・・、D[n-1] for (i=n-1; i>0; i=i-1) { max = D[0]; maxIndex = 0; for (j=1; j<=i; j=j+1) { if(D[j]>=max) { max = D[j]; maxIndex = j; } } swap(D[maxIndex],D[i]); } この アルゴリズム は、2重のfor文により構成されている。変数 n に依存する i , j の2重ループなのだからO(n^2)になることは安易に想像できるが、計算すると次のようになる。 外側のfor文の繰り返し実行回数は n - 1 回であり、内側のfor文は外側のfor文の変数 i に依存し、i 回の繰り返しとなっている。したがって、この アルゴリズム の計算量は、以下の式で表される。 計算量の比較 複雑になるため詳細は省略するが、その他のソート アルゴリズム の計算量を計算すると、例えば クイックソート の場合はO(n logn)になる。オーダー記法の漸近的な大小関係は以下のようになることから、選択ソートと クイックソート を比較すると クイックソート のほうが計算量が小さい事が 数値的に わかる。 まとめ オーダ記法によって漸近的な時間計算量を示すことができる。 プログラムを実行して時間を測定しなくとも、入力サイズ n に対してどの アルゴリズム が一番速いか数値的に比較できる。
はじめに はじめまして。開発エンジニアのwest-cです。 ラク スに新卒で入社し、今年で3年目になります。 ラク スでもエンジニアブログをはじめることになりました。 記念すべき1エントリ目を書くことになり光栄です。 本題 そんな1エントリ目のテーマですが、現在、私自身が新卒メンバーの育成を担当していることもあり、今年入社した新米エンジニアを対象にお話をしたいと思います。 大学や会社の研修でプログラムは学ぶかと思いますが、ログの見方・調査方法についてしっかり学んだことのある方は少ないのではないでしょうか。 個人で作成したプログラムであればエラーが発生したとき程度しか見ないログですが、お客様に提供するアプリケーションとなると話はちょっと変わってきます。 ログは、ユーザがとった行動の証跡(証拠)となることから、利用状況の把握から問題が発生した場合の原因特定まで非常に重要な役割を担います。 ログの形式はソフトウェアによって異なるためそれぞれの公式ドキュメントに譲るとして、ここでは ログ調査にあたり知っておくと便利な Linux コマンド を紹介したいと思います。 なお、今回は Apache のアクセスログ を例として説明を行います。 リアルタイムでログを監視したい $ tail -f access_log ファイルの末尾が更新されると自動的に追加分が表示されます。 例えば、検証環境にて画面遷移をした瞬間のログを確認したい場合などに重宝します。 長い スタックトレース を確認する場合は、予めEnterキーでいくつか改行を入れておくとログの切れ目が分かりやすくなり便利です。 ログをスクロールして表示したい $ less access_log 行数の長いファイルの場合、 cat でファイルの中身を見ようとすると画面に収まり切らず、目的のログに辿り着くのにひと苦労します。 そのようなときに less を利用すると、スクロールしながら閲覧することができます。 less コマンド内で利用できる操作のうち、個人的によく使うものは以下になります。 キーバインド 説明 b 1画面分上にスクロール スペース 1画面分下にスクロール g ファイル先頭に移動 G ファイル末尾に移動 /文字列 ファイル内を文字列で検索 n 次にヒットした検索文字列の行に移動 N 前にヒットした検索文字列の行に移動 F リアルタイムで監視( tail -f と同様) q less コマンドを終了する 表示する行を絞り込みたい 以降は、以下のような アクセスログ を前提として説明を行います。 (GET or POST の前の数値はリク エス ト処理にかかった時間(単位:秒)、末尾の数値はレスポンスサイズと解釈してください) $ cat access_log 192.168.10.11 - - [10/Oct/2000:13:55:36 -0700] 1 "GET /index.php HTTP/1.0" 200 2326 192.168.10.11 - - [10/Oct/2000:13:55:36 -0700] 0 "GET /top.jpg HTTP/1.0" 200 310 192.168.20.8 - - [10/Oct/2000:13:56:01 -0700] 10 "POST /login.php HTTP/1.0" 200 1793 192.168.30.50 - - [10/Oct/2000:13:57:11 -0700] 5 "GET /mypage.php HTTP/1.0" 200 831 192.168.30.50 - - [10/Oct/2000:13:57:11 -0700] 0 "GET /room.png HTTP/1.0" 200 4530 特定の文字列が含まれる行のみを抽出したい場合は grep の出番です。 $ grep "login" access_log 192.168.20.8 - - [10/Oct/2000:13:56:01 -0700] 10 "POST /login.php HTTP/1.0" 200 1793 ファイルから「login」という文字列が含まれる行のみが抽出されました。 逆に「login」という文字列を含まない行を表示する場合は、 -v オプションを付けましょう。 $ grep -v "login" access_log 192.168.10.11 - - [10/Oct/2000:13:55:36 -0700] 1 "GET /index.php HTTP/1.0" 200 2326 192.168.10.11 - - [10/Oct/2000:13:55:36 -0700] 0 "GET /top.jpg HTTP/1.0" 200 310 192.168.30.50 - - [10/Oct/2000:13:57:11 -0700] 5 "GET /mypage.php HTTP/1.0" 200 831 192.168.30.50 - - [10/Oct/2000:13:57:11 -0700] 0 "GET /room.png HTTP/1.0" 200 4530 grep -E または egrep を利用すると、検索文字列に 正規表現 を利用することができます。 上記を組み合わせると、画像ファイル( *.jpg , *.gif , *.png )を除外したログを表示したい場合に、以下のように記述することができます。 $ egrep -v "\.(jpg|gif|png)" access_log 192.168.10.11 - - [10/Oct/2000:13:55:36 -0700] 1 "GET /index.php HTTP/1.0" 200 2326 192.168.20.8 - - [10/Oct/2000:13:56:01 -0700] 10 "POST /login.php HTTP/1.0" 200 1793 192.168.30.50 - - [10/Oct/2000:13:57:11 -0700] 5 "GET /mypage.php HTTP/1.0" 200 831 表示する列を絞り込みたい 例えば以下の3つの情報がログ調査に必要であるとします。 アクセス日時 リク エス トURL リク エス トにかかった時間 この3つ以外の情報は今回は必要の無いノイズ情報ですので、 awk で表示する列を絞り込みましょう。 awk で列を絞り込む場合、デフォルトでは空白(スペース)またはタブ単位で区切られます。 今回の例だと、4列目(アクセス日時)・6列目(リク エス トURL)・8列目(リク エス トにかかった時間)だけを表示したいことになります。 $ awk '{print $4,$6,$8}' access_log [10/Oct/2000:13:55:36 1 /index.php [10/Oct/2000:13:55:36 0 /top.jpg [10/Oct/2000:13:56:01 10 /login.php [10/Oct/2000:13:57:11 5 /mypage.php [10/Oct/2000:13:57:11 0 /room.png 必要な情報のみが表示され、見通しが良くなりました。 $ の後の数字には、区切り文字で行を分割した際の順番が入ります(1始まり)。 区切り文字を変更したい場合は、 -F '区切り文字' とオプションを付与すれば良いです。 ちなみに cut コマンドでも同様のことは実現できますが、次に紹介する話との関連で、ログの確認時には awk を利用することをおすすめします。 条件に合致するログのみを抽出したい ひとつ前の例に追加して「リク エス トに3秒以上かかったログのみを抽出したい」場合を考えてみましょう。 awk は プログラミング言語 なので、条件分岐を記述することもできます。 $ awk '$6>=3{print $4,$6,$8}' access_log [10/Oct/2000:13:56:01 10 /login.php [10/Oct/2000:13:57:11 5 /mypage.php このように「○番目の項目が□□だった場合」と記述することができるため、単純な文字列一致の条件の場合でも grep よりも細かく絞り込みを行うことができます。 まとめ 私自身、入社したての頃にログファイルをviで開いて怒られたりログファイルを根こそぎ Excel に貼り付けてちまちま絞り込みを行ったりと苦い経験があったため、今回このテーマを選ぶことにしました。 今回取り上げた内容は基本的なものであり、さらに高度なログ集計を行おうとすると、 sort や uniq 、 sed なども必要になるかと思います。 まずはこの記事を足がかりに、その他のコマンドも習得してステップアップしてもらえると嬉しいです! エンジニア 中途採用 サイト ラク スでは、エンジニア・デザイナーの 中途採用 を積極的に行っております! ご興味ありましたら是非ご確認をお願いします。 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