VOYAGE GROUP エンジニアブログ

voyagegroup_techのブログ
VOYAGE GROUPエンジニアブログです。

知らなきゃ損するVOYAGE GROUPエンジニアが薦めるブログ、ウェブサイト

こんにちは、ECナビでアプリケーションエンジニアとして働いている@araiguma47です。

つい先日今年が始まったと思ったらもう1か月経ってしまいました。
年々時間が過ぎるのが早くなっている気がします。

VOYAGE GROUPエンジニアが普段見ているブログやウェブサイトをヒアリングしたところ、
技術に関することから普段愛用しているサイトまで色々集まりました。

◇技術系ブログ、まとめサイト


ブログ・サイトコメント推薦者イイネ!
徳丸浩の日記ITエンジニア必見のセキュリティに関することが書かれているブログ@araiguma47koheisg
SICP暇になったらみて問題といてる@suzu_vjewel
Rebuild結構更新多くて全部聞けないけどシニアエンジニアの意見が聞ける@tomita@suzu_v
@makoga
セキュリティホール memo朝出勤したらとりあえず目を通す@co3k
High Scalabilityアーキテクチャみて参考にすることがある@suzu_v
Big Skygolangとかvimとか@suzu_v@_nishigori
高木浩光@自宅☆の日記ためされるtDiary@makoga@suzu_v
Signal vs. Noiseリモートワーク派とそうでない派を煽っていくスタイルが素敵@suzu_v
Fine Software Writingsソフトウェア開発に関する文章の翻訳@makoga
blog.hansode.orgdevopsインフラ系?半袖さんブログ ※1st-okamoto
masato's blogdevopsインフラ系トンガリ系技術周りst-okamoto
bkノートただしRSSなくて読みにくいです@tomita
RTB Squareアドテク関係の情報収集jewelrail44
karahiyo_n
@kiris
ReadWriteテクノロジー系の情報収集jewel
Arch Linux wikiArch Linuxに限らず、あらゆるLinuxの知見があるrail44t-nakamura
Secunia (の Advisories ページ)メールによる Advisory 通知とか廃止になってしまって悲しい@co3k
Rickey Newsライフハック系+ちょっとしたTips@hidetoshing
juggly.cnAndroidのニュースが最も早く日本語で手に入る場所rail44
Hacker Newsユーザ投稿型のニュースサイトjewel@suzu_v
POSTDとんがり技術エントリの翻訳ブログst-okamoto
漢のコンピュータ道説明がわかりやすい。漢@a01sarukoheisg
karahiyo_n
るびきち「日刊Emacs」Emacs系の情報収集@kirisjewel
@kiris
publickeyクラウドコンピューティングやHTML5など最新の話題を紹介するブログkoheisg
html5html5koheisg
phprightwayphperなら読んでいるはずkoheisg
doyouPHP?はてな歯ブラシの使い心地を確認するために、PHPデザインパターンをたまに読むkoheisg
404 Blog Not Founddankogaikoheisg
KaoriYaKaoriYa Vimつくってる人@_nishigori


◇便利サイト

知っていると便利なウェブページ。使いこなせば日々の効率をきっと上げることが出来るはずです。

ブログ・サイトコメント推薦者イイネ!
英辞郎 | アルク英単語に迷ったらここで検索@smileeeenjewel
regexper正規表現の確認に○karahiyo_n
codepadちょっとしたコードの確認@hidetoshing
Google Scholar大学の頃からつかってる@suzu_v
puphpetvagrant file生成ツールkoheisg
Qiitaスマフォあぷりはよkoheisg
Trello日々のタスク管理に@kiris
toodledo圧倒的UIkoheisg
omnifocusGTDならこれkoheisg

◇そのほか

VOYAGE GROUPエンジニアが日々愛用しているウェブページです。

ブログ・サイトコメント推薦者イイネ!
東京アメッシュ極力雨を避けて帰る@smileeeen@suzu_v
karahiyo_n
Make: Japan面白いものが紹介されてるjewel
massdrop変なキーボードを共同購入できるrail44gomachan
karahiyo_n
NOMOOO素晴らしいお酒系メディアjewel@kiris
オレ的ゲーム速報素晴らしいゲーム系メディア。Alexa traffic rankがとても高い。個人メディアでは最強だった気がする@a01saru
はてぶ個人的にはHBFavというアプリで見るのがおすすすめkoheisgrail44
crowsnestsmartnewsのあの会社のツイッターの自分のタイムラインのURLを拾ってくるツールkoheisg
typebeats音ゲーしながらタイピング練習できる@gomachankarahiyo_n
ECナビVOYAGE GROUPエンジニアならみんな見ているはず@hidetoshing@a01saru
koheisg
PeXVOYAGE GROUPエンジニアならみんな見ているはずkoheisg

以上、さまざまなサイトを紹介させていただきましたが、有意義なページはありましたでしょうか。
今回紹介させていただいたサイトが皆さんの役に立ってくれると幸いです。

※1 当初「(あまり更新されませんが)」と記載していましたが、この表現はブログ主に対して失礼であり、紹介したクルーの本意ではないということで修正しました。社内の公開プロセスに問題があり適切ではないコメントを掲載してしまい申し訳ありませんでした。

M1・THE MANZAIの結果で学ぶawk入門

こんにちは。
Zucks Affiliateというサービスの開発・運用を行っている宗岡です。

皆様、昨年末のTHE MANZAIはご覧になられましたでしょうか。
優勝した博多華丸・大吉は本当に面白かったですね。

そこで、今回は「M1・THE MANZAIの結果で学ぶawk入門」というテーマで書いてみたいと思います。

今回は、サンプルのテキストファイルを元にawkでどんな事が出来るのか、何が便利になるのかを改めて語ってみたいと思います。

題材としては、過去のM1と、THE MANZAIで優勝した芸人達の、所属事務所や、結成年度を使います。
これらを元に、awkを使うと、いとも簡単に欲しいデータが手に出来てしまうということを実践していきたいと思います。

サンプルとして使うファイル (m1_theman.txt)

開催年度 優勝者 所属事務所 結成年度
2001 中川家 よしもと 1992
2002 ますだおかだ 松竹芸能 1993
2003 フットボールアワー よしもと 1999
2004 アンタッチャブル 人力舎 1994
2005 ブラックマヨネーズ よしもと 1998
2006 チュートリアル よしもと 1998
2007 サンドウィッチマン グレープカンパニー 1998
2008 NONSTYLE よしもと 2000
2009 パンクブーブー よしもと 2001
2010 笑い飯 よしもと 2000
2011 パンクブーブー よしもと 2001
2012 ハマカーン ケイダッシュステージ 2000
2013 ウーマンラッシュアワー よしもと 2008
2014 博多華丸・大吉 よしもと 1990

では、このファイルを使ってawkの便利さを実感していきましょう。

の前に、今回はawk入門なので、基礎知識についても一応書いておこうと思います。

0. awkの基礎

awkは、下記の3つをテキストの最後の行まで繰り返し行うもので、3の「処理を行う」部分を自分で書いていきます。
  1. テキストから1行を読み込み
  2. 読み込んだ行を空白区切りのデータと解釈し
  3. 処理を行う

この読み込んだ1行の事をレコードと言い、レコードの中に空白で区切られた1つ1つの項目をフィールドといいます。


各フィールドは、$1, $2のように”$”の後にフィールドの番号を付ける事で、各フィールドを表すことが出来ます。


awkには特殊な変数もあり、$0はレコード全体を表し、NRは行数、NFはフィールド数を表します。

これでawkの基礎はバッチリです。


1. 特定のフィールドだけ表示する

では、早速やっていきましょう。
試しに開催年度と、優勝者だけを表示してみましょう。

開催年度と優勝者はそれぞれ、1列目と2列目のフィールドに記載されているので、$1と$2を表示あげれば行けそうです。

$awk '{print $1":"$2}' m1_theman.txt
開催年度:優勝者
2001:中川家
2002:ますだおかだ
2003:フットボールアワー
2004:アンタッチャブル
2005:ブラックマヨネーズ
2006:チュートリアル
2007:サンドウィッチマン
2008:NONSTYLE
2009:パンクブーブー
2010:笑い飯
2011:パンクブーブー
2012:ハマカーン
2013:ウーマンラッシュアワー
2014:博多華丸・大吉

簡単ですね。

2. 優勝した時の結成年数を計算して表示してみる

awkはプログラムとしても書けるので、処理を書いたものを用意してみます。
また、awkは普通に四則演算も出来るので、今年のコンテストの開催年度から結成年度を引いて、優勝した時点でのコンビの結成年数を出してみます。
$cat test.awk
{
    printf("%s年: %s(結成%s年)\n", $1, $2, $1-$4)
}

拡張子は何でもいいですが、awkプログラムだとわかりやすいようにawkとしてます。
では早速これを使って、開催年度、優勝者、結成年数を表示してみます。

$awk -f test.awk m1_theman.txt
開催年度年: 優勝者(結成0年)
2001年: 中川家(結成9年)
2002年: ますだおかだ(結成9年)
2003年: フットボールアワー(結成4年)
2004年: アンタッチャブル(結成10年)
2005年: ブラックマヨネーズ(結成7年)
2006年: チュートリアル(結成8年)
2007年: サンドウィッチマン(結成9年)
2008年: NONSTYLE(結成8年)
2009年: パンクブーブー(結成8年)
2010年: 笑い飯(結成10年)
2011年: パンクブーブー(結成10年)
2012年: ハマカーン(結成12年)
2013年: ウーマンラッシュアワー(結成5年)
2014年: 博多華丸・大吉(結成24年)
1レコード目の「開始年度」「優勝者」などが邪魔ですね。
今回の結果に合わせたフィールド名を表示してみましょう。

awkでは処理の初めに1回だけ実行したいものは、BEGINという部分に書けばOKです。
(処理の最後に1回だけ実行したいものはENDに書きます)

また、中括弧”{}”の前に条件を書けば、条件に一致したレコードにだけ処理をさせることも可能ですので、この2つを使っていい感じに表示してみます。

$cat test.awk
BEGIN {
    print "開催年度:" "優勝者(結成年数)"
}
# 2行目以降だけ処理する
NR > 1 {
    printf("%s年: %s(結成%s年)\n", $1, $2, $1-$4)
}
1行目に出すフィールド名に関しては、BEGINに書き、2行目以降にだけ処理を適用するのに"NR > 1"と書いています。
(NRは一番初めに出てきた行数を表す特殊変数です)
$awk -f test.awk m1_theman.txt
開催年度:優勝者(結成年数)
2001年: 中川家(結成9年)
2002年: ますだおかだ(結成9年)
2003年: フットボールアワー(結成4年)
2004年: アンタッチャブル(結成10年)
2005年: ブラックマヨネーズ(結成7年)
2006年: チュートリアル(結成8年)
2007年: サンドウィッチマン(結成9年)
2008年: NONSTYLE(結成8年)
2009年: パンクブーブー(結成8年)
2010年: 笑い飯(結成10年)
2011年: パンクブーブー(結成10年)
2012年: ハマカーン(結成12年)
2013年: ウーマンラッシュアワー(結成5年)
2014年: 博多華丸・大吉(結成24年)
いい感じになりました。

3. 優勝コンビの平均結成年数を出してみる

ここ14年間色んなコンビが優勝してきた訳ですが、
ここまで来ると、一体結成何年くらいのコンビが優勝してるのか、
つまり優勝コンビの平均結成年数が何年かが気になってきます。
という事でこれも計算して出してみます。

実はawkでは変数も扱う事が出来るので、その練習として、優勝コンビの平均結成年数を出して見たいと思います。

$cat test.awk
BEGIN {
    sum = 0
}
NR > 1 {
    # 結成年数をsumにインクリメントしてく
    sum += $1 - $4
}
END {
    printf("平均結成年数: %d年\n", sum/(NR-1))
}

BEGINで処理の最初にsumという変数を用意して、ENDで処理の最後に平均を計算しています。

$awk -f test.awk m1_theman.txt
平均結成年数: 9年

意外と若手。

と、このような事実もawkを使えばあっという間に分かってしまいます。

4. 所属事務所毎の優勝回数を出してみる

awkの便利なところはこれだけでは有りません。
普通に、配列も使えて、forやwhileなどの制御構文も使えるのです。
では、この配列と制御構文を使って優勝コンビの所属事務所毎の優勝回数を出してみます。

$cat test.awk
BEGIN {
    # resultを初期化
    split("", result)
    print "所属事務所:" "優勝回数"
}
NR > 1 {
    # 所属事務所を連想配列のキーにしてインクリメント
    result[$3]++;
}
END {
    for (agency in result) {
        printf("%s: %d回\n", agency, result[agency])
    }
}

splitというのはawkの組み込み関数で、第一引数に受け取った値を指定された区切り文字で分割して配列にするものです。

$awk -f test.awk m1_theman.txt 所属事務所:優勝回数
よしもと: 10回
グレープカンパニー: 1回
松竹芸能: 1回
ケイダッシュステージ: 1回
人力舎: 1回

圧倒的よしもと。
こういった処理もawkなら簡単です。

5. 結成10年以上で優勝したコンビを出してみる

最後に、awkでは自分で関数を定義することも出来るので、先ほどの結成年数を計算する部分を関数にして、結成10年以上のコンビだけ出してみたいと思います。

$cat test.awk
# 結成年数を返す
function getYear(combinedYear) {
    return $1 - combinedYear
}
BEGIN {
    print "優勝年度:" "優勝者(結成年数)"
}
NR > 1 {
    year = getYear($4)
    # 結成年数が10年以上の場合だけ表示
    if (year >= 10) {
        printf("%s: %s(%d年)\n", $1, $2, year)
    }
}
$awk -f test.awk m1_theman.txt
優勝年度:優勝者(結成年数)
2004: アンタッチャブル(10年)
2010: 笑い飯(10年)
2011: パンクブーブー(10年)
2012: ハマカーン(12年)
2014: 博多華丸・大吉(24年)

博多華丸・大吉、大ベテランですね。

まとめ

今回は入門編という事で簡単な例でawkの便利さを伝えてみましたが、
これだけでも色々なテキストの処理が簡単に行える事が想像付くかと思います。

実務においても、ログファイルの解析などを行う際にawkを使ってみると色々捗るかと思います。
先月までの私のように、awkの便利さを知らなかった方がいらっしゃいましたらこの機会に使ってみてはいかがでしょうか。


[PR]
VOYAGE GROUPではアドテクエンジニアを絶賛募集中です。
ご興味ある方は下記サイトもしくは @tech_voyage にご連絡ください。

https://voyagegroup.com/adtechunit/

2014年 個人的ハイライト

こんにちは。Zucksアドネットワーク@karahiyo_nです。 2014年に新卒として入社し、今はZucksアドネットワークのサービスの開発、運用保守をしています。

今回は、例年に習い年の初めということで、去年の振り返りをしたいと思います。 新卒である自分が去年の振り返りを書くモチベーションとしては、2016年の新卒採用も本格的に始まったということもあるので、将来の後輩に向けて新卒一年目の私の2014年の振り返りをまとめたいと思います。

2014年の振り返り

4月

はじまり。

入社して2週間ほど会社説明とビジネス研修を行い、その後各事業部に配属となります。

私の場合は、Zucksアドネットワークのエンジニアとして配属され、まずは会社PCのセットアップ、使うツールの設定など、仕事のための環境を整え、 アドテク業界知識を学び、あと手頃なタスクをこなしつつシステムの理解をしました。

ちなみに、新人エンジニアに勧める一冊 というブログがこの頃公開されました。

5月

したこと・出来事
  • RDS運用のための、バッチ処理の開発
    • Gauche初触り
  • DBマイグレーションの整理
    • MyBatis -> Flyway に移行
  • 配信ロジック周り微修正
    • Scala初触り
  • エンジニア研修
    • 毎週木曜日新卒研修として、各事業部の方からその部署ならではの講義と、先輩社員からのありがたいお話をお聞きしました。
    • スケジュール
      1. リーンスタートアップとUXデザイン
      2. ポイントメディアを支える技術
      3. Webデザイン
      4. インターネット広告を支える技術
      5. DB
      6. データ解析
      7. スマホ
      8. インフラ、セキュリティ
    • 7月1週目までの研修でした
個人的ハイライト
  • ボルダリングを始める
  • #ajiting

6月

会社ハイライト

  • VOYAGE CUP
    • クルー全員で行う運動会。全クルーが数チームに分かれ本気で勝利を目指すので、ものスゴイ盛り上がりを見せます。
したこと・出来事
  • SSL証明書の更新
  • 配信結果のログを解析側に流す
    • Gauche, td-agent
  • 現場で使えるMySQL 勉強会
  • エンジニア研修
  • エルダーランチ
    • エルダー制度とは、新入社員のためのフォローアップ制度です。業務でもそれ以外でもなんでも相談することができます。
    • より簡単に政治的に正しく言うなら、兄弟・姉妹のようなもの、でしょうか
  • Zucksアドネットワークチームに@kirisさんが加わる
  • 席替え
個人的ハイライト

7月

会社ハイライト

したこと・出来事
  • マイグレーションスクリプト管理のために、バリデーション機能を追加
  • バッチサーバの移行
    • 既存のプロビジョニング方法を確認
    • CloudFormation, Puppet
    • AMI焼いたり
  • エンジニア研修
  • クルーラリーをやっていました
    • クルーラリーとは、新卒・中途採用の方向けに、社内のクルーと交流を図るための取り組みです。招待制で社内のクルーと面談をして回るというものです。今後も時間作って、普段交流のない他部署の方と交流する機会を作っていきたいです。

8月

会社ハイライト

  • 技術力評価会
    • 技術力評価会とは、定期的(現在、半年に一回)に行われる、技術者の能力を技術者が評価する会です
  • CCFB(クリード・コンピテンシー・フィードバック)
    • CCFBとは、VOYAGE GROUPが経営理念に掲げている「クリード」(VOYAGE GROUPの価値観)、このクリードに沿った振り返りを、半年に一度多面評価によって行うというものです。
    • CCFBに関する記事1記事2
したこと・出来事
  • 配信結果の計測サーバ、バッチ処理まわりで開発
    • PHP, Symfony, Gauche, td-agent
  • 運用、保守
    • インスタンスサイズの変更など
    • 広告配信設定の調査
  • 席替え
個人的ハイライト
  • YAPC::Asia Tokyoに参加
  • SICP勉強会を始める

9月

全社ハイライト

したこと・出来事
  • 広告配信サーバの機能開発
    • Scala
  • NewRelic Browserの設定調査・導入
  • shellshock対応
  • AWSメンテナンスによるreboot祭り対応
    • バッチ処理系に苦労した記憶があります
    • ひたすらAMI焼いていました
個人的ハイライト

10月

会社ハイライト

したこと・出来事
  • 機能開発
    • PHP, Symfony, Scala
    • 言語ターゲティング
個人的ハイライト

11月

会社ハイライト

  • Sunrise
    • Sunriseとは、2011年から始まったエンジニア向けインターンで、100万人以上のユーザが使うことを前提としてサービスを企画・設計する、といった内容のインターンです
したこと・出来事
  • 機能開発
    • 言語ターゲティング
  • 運用保守
    • DBメンテナンス
    • コントローラサーバのメンテナンス
個人的ハイライト

12月

したこと・出来事
  • ネットワーク環境の整理
    • NATを新しくする
    • Packer
    • VPC Peering
  • データベースのメンテナンス作業
    • 過去データのtruncate
    • ボリュームサイズアップ
      • リカバリ方法を考えるなど
  • その他運用保守
  • 配信設定データを解析のためにS3にあげる
    • IAM ロール、バケットポリシーを調査しました
個人的ハイライト

まとめ

以上、昨年一年間を、会社ハイライト、Zucksアドネットワークで私が行った仕事ハイライト、あとはその他として個人的なハイライトでわけて振り返ってみました。 この振り返りが、将来の後輩が働き方をイメージするなどの際に何かしらの参考になれば幸いです。

思えば昨年は、VOYAGE GROUP、Zucksアドネットワークのチーム、同期、ajiting、あとボルダリングや将棋、ビリヤードなどの趣味など、 新しいコミュニティにたくさん触れる事ができたと思います。

今年も昨年以上に学び多く、そしてよりOutput多い年にしたいと思います。

本年もよろしくお願い申し上げます。

記事検索
QRコード
QRコード