派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

池澤あやかとはてな大西がヤフーの村上さんに「エンジニアの働きやすい職場って?」と聞いてみた。【後編】

f:id:blog-media:20160219085037j:plain

連載:池澤あやかとはてな大西の「エンジニアの働きやすい職場って?」

タレントでエンジニアとしても活躍されている池澤あやかさんと、株式会社はてな チーフエンジニアの大西康裕が、エンジニアの働く環境や開発の様子、エンジニアのキャリアパスなどについてインタビューする連載です。毎回、さまざまな企業を訪問し、エンジニアの理想の働く環境について考えていきます。

池澤 というわけで後編スタートです! 前編ではオフィス最適化推進部長の工藤さんに、オフィス内にあるカフェ「CAMP10」やフリースペースを紹介していただきました。

f:id:blog-media:20160219105447j:plain

池澤さんと大西、フリースペースでなぜかろくろを回す。

大西 カフェで食べたパン、おいしかったですね。CMOの村上さんがいる場所まで戻ってきました。あらためて村上さんにお話を伺います。

f:id:blog-media:20160219105442j:plain

執行役員 CMO(チーフ・モバイル・オフィサー) 村上臣さん

村上 よろしくお願いします。

大西 村上さんの「CMO(チーフ・モバイル・オフィサー)」という肩書きは珍しいですよね。業務内容について教えていただけますか?

村上 確かに珍しいですよね。普通「CMO」なら「チーフ・マーケティング・オフィサー」の略称ですもんね。たぶんうちだけの肩書きだと思います。

池澤 そうなんですか!

村上 ヤフーはもともとPC向けサービスをメインでやっていた会社です。スマートフォン対応はiPhoneが発売された頃からずっと取り組んでいますが、PCのイメージがあまりにも強く、アプリやスマホ向けサービスにやや乗り遅れているという印象がありました。

f:id:blog-media:20160219113206j:plain

村上 前編で工藤からもお話しした通り、ヤフーは2012年4月に社長をはじめ経営陣のほとんどが新しくなりました。その際に、当時日本にも広がりつつあったスマートフォンに最適なサービスにするため、「スマホシフト」という言葉を掲げました。しかし、PC向けのサービスをメインにやってきていたので、Webアプリやインフラが得意なエンジニアはたくさんいますが、スマホ向けサービスを作る人はなかなか社内にいませんでした。そこで「スマホシフト」の象徴として、CMOという役職を旗振り役に設置したらどうかという話になりました。

池澤 村上さんは一度ヤフーを退社されていますよね。

村上 2011年に独立して、2012年の新体制発足時にヤフーへ呼び戻され、CMOに就任しました。当時、会社を挙げて本気でスマホ対応に取り組むことを、我々は「移住する」という表現を使い、PC大陸からスマホ大陸への移住に取り組んできました。CMOとしての僕の一番重要な役割は、ヤフーの各サービスがスマホ大陸に移住するのをサポートすることでした。

大西 なるほど。今も村上さんが具体的な開発に関わっているんですか?

村上 「Yahoo! JAPAN」アプリや「Yahoo!ニュース」アプリといったメディア系アプリなどについては、担当する各事業部に僕が行って、実際にメンバーと一緒にプロダクトを作るようなこともやっています。アプリならではの動きや見せ方について各事業部にインプットしていくのが僕の仕事です。

大西 プロダクトそのもののマネージャーは別にいるんですね。その方と相談しながら作っていくのでしょうか。

村上 僕が一番見ているのはUXです。ヤフーの提供するアプリには、Webページの遷移っぽい作りのものが結構多いんです。スマホでのWebビューをうまく作り込みすぎてしまって。僕が完全にユーザー目線で使ってみて、動きがちょっとひっかかるよねとか、こういう出し方をしたらどうかとか、指摘をしていくことが多いです。

f:id:blog-media:20160219105424j:plain

大西 CTO(チーフ・テクニカル・オフィサー)とは違うんですね。

村上 ヤフーでは、インフラやデータセンター、フロントエンドなど扱う領域があまりにも広すぎるため、それを全部まとめてCTOが1人で見るというのは難しいんです。2012年当時も、もちろんCTOはいましたが、僕がテクニカルな面も担当していました。ちなみに最近、藤門(藤門千明さん)という、ヤフーに新卒で入社した者がCTOになりました。

池澤 確かに会社も大きいですし、専門領域の数も相当ありますね。

村上 その代わりに「黒帯制度」というものを作りました。各専門分野でトップのエンジニアを「黒帯」として認定しています。あわせて「テクニカルディレクター」という、各事業部のCTOに当たる役職を置いて、その2つが連携して各サービスのテクニカルな面を見ています。

池澤 「黒帯」、聞いたことあります!

f:id:blog-media:20160219105433j:plain

大西 名前が面白いですね。詳しく教えてください!

村上 技術について高い専門性を持った人を「黒帯」として選定・任命する制度なんです。「エンジニアの才能と情熱を解き放つ」ための施策です。スキルのほかに経験や実績も認定基準に含まれています。

黒帯制度~エンジニアの才能と情熱を解き放つ~ Yahoo! JAPAN - IR関連情報

大西 認定される人はどう選んでいるのでしょう。

村上 開発本部長とテクニカルディレクター、そして黒帯の合議制です。全員が賛成すればOK。対象者はその辺の人に聞いて回ればだいたい「あいつすごい」っていう候補があぶり出されてきて、裏を取ってみるとだいたいその通りだなって分かる(笑)。

大西 黒帯には何人でもなれるんですか?

村上 今のところ上限はないです。結構増えてきましたね。

大西 本当に武道の黒帯っぽい感じですね。

新体制での変化を成し遂げた力は、エンジニアが持つ「インターネット文化」

大西 社内の開発フローについて教えていただけますか。

村上 これまではかなりウォーターフォール型の開発をしていました。要件定義して、ディレクターが外部仕様書を作って印刷して……。でもアプリとなるとそれじゃ表現できません。新体制になって大きく変わって、今はかなりアジャイルを意識した、プロトタイピング重視の開発になってきています。

 ディレクターもクリエイターもコーディングする人も、サービスごとに一緒のチームで動きます。アプリ開発の現場だとほぼプロトタイプで最初に全部固める!という感じで、動きのあるものをいろんなパターンで作って、触って確かめていますね。

大西 今のお話の中だけでも聞きたいことが山ほど出てきたんですが……(笑)。ウォーターフォールからアジャイルっぽい開発手法への変化については、どのような問題意識があったんでしょうか。

f:id:blog-media:20160219134658j:plain

村上 新旧という言い方をあえてしますが、旧体制のときは組織が急激に大きくなっていったので、マネジメントをする上でビジネス側と開発側のすり合わせが非常に重要でした。開発側は2,000人くらいの大きな部隊としてまとまっていたんですが、まるで社内に別の会社があって、そこと受発注をするという感じになってしまうんです。ビジネス側から開発側に要求が来て、「工数が何人月かかります」「できません」みたいなやりとりをその都度していて、スピードが非常に遅かった。

大西 確かに。案件の検討だけでも大変そうですよね。

村上 新体制では、開発する側の人間もサービスに近い方がいいという方針にしました。「爆速」という言葉に象徴されるんですが、今の世の中のリズムに合わせて、開発を速く進めないといけないし、世に出して改善を続けないといけない。実は昔のヤフーって、「サービス愛」を持つなって言われていたんですよね。

池澤 えっ、そうなんですか。

村上 なぜかというと「いろいろ変わるから」。案件の担当者が異動で変わっていくし、生産性を上げるためにはサービスに対して愛着を持たない方がいいと……

大西 機械のように?

村上 そうそう。機械のように働くことで、生産性を上げていたんですよ。サービスを手掛けたくてみんなヤフーに入ってきているのにそれっておかしいよね、という話になって、新体制では愛を取り戻す方向へと。

池澤 なるほど!

大西 ウォーターフォールからアジャイルへ、サービス愛を「持つな」から「持て」……相当大きな変化ですよね。特に開発フローを突然変えるのはなかなか難しいんじゃないかなと思います。アジャイルの導入に障壁はありませんでしたか?

村上 当初はやっぱりありました。社内にスクラムマスターやOSSで活動する人がいたので、そういう人が火付け役になって、徐々に広がっていきました。結果としてうまくいったのは、会社のベースにいわゆる「インターネット文化」があったからですね。

池澤 おおー、すごい。

f:id:blog-media:20160219161524j:plain

大西 その分野への興味は皆さんずっと持っていたんですね。「インターネット文化」はエンジニアにとって大きいですよね。

村上 「個人的に外部の勉強会に行っていた」「実はずっとやりたいと思っていたけど業務に応用する余裕がなかった」など、技術に興味を持ち続けたエンジニアが、その動きに積極的に乗っかりはじめました。みんなそれぞれ技術についてずっと勉強していて、「アジャイルに興味あるから手伝うよ!」なんて横のつながりでどんどん加速していきました。

大西 スクラム開発などは導入されていますか?

村上 はい。やり方は各プロジェクトの自主性に任せています。全部取り入れるのではなくて、やりやすいようにアレンジするとか。

大西 なかなか教科書通りだと大変ですよね。

村上 例えば、XP(エクストリームプログラミング)をそのまま導入するとペアプログラミング(以下、ペアプロ)が必須になるんですが、なかなか日本人には難しい文化という気がしています。

池澤 どのあたりが難しいんでしょうか。

村上 2つ難しい面があると思っています。1つは現場の視点で、同じコードを2人で見せ合うのは恥ずかしいという心理的な不安がありますよね。もう1つはマネージャー側の視点なんですが、どうしても非効率に見えてしまうんです。エンジニアが2人いて、同じコードを書いているなんて……って思っちゃう場合が多いんですよね。ペアプロによってクオリティを上げて、テストも自動化して、品質も上がって……そう分かってはいても、実際の手順に落とし込むのはエンジニア出身のマネージャーでもハードルが高いと思います。

f:id:blog-media:20160219105428j:plain

大西 はてなでも、ペアプロをやっているのははてなブログのチームだけですね。そこは結構がっつりやっています。コードを人に見せるのが恥ずかしいという領域を通り越しちゃって、部屋の中で一番大きなモニタに写して、誰でも見られるような形でコーディングすることもあります。

村上 ヤフーでは今、「Pivotal」という会社が運営するオープンソースのPaaS基盤ソフトウェア「Pivotal Cloud Foundry」のプロジェクトにコミットしようとしています。僕も何回かアメリカのPivotalに行ってやり方を見てきています。Cloud FoundryはXP原理主義者の集まりで、ペアプロは必須です! 共同開発の動きが進んだら、そういう色に染まった人が社内に増えていくと思います。そこで何が起こるのか、とても楽しみです。

“24時間ぶっ通し開発”のイベントから全社員が使うツールが生まれた!

大西 先ほどエンジニアの皆さんが持つ「インターネット文化」について伺いましたが、他にも何かありますか?

村上 ヤフーが主催するイベント「Hack Day」もエンジニア文化の1つです。プログラマーやクリエイターが集まって24時間ぶっ通しでおもしろいものを作ろう!というハッカソンで、日本では2007年からずっと開催しています。

Yahoo! JAPAN Hack Day 2019/24時間ハッカソンの受賞作品を公開!グランプリに輝いた作品は!?当日の模様を動画でもチェック!https://hackday.jp/ #つくるってたのしいね
Tumblr

大西 どういったいきさつで始められたんでしょう。

村上 もともとはアメリカのYahoo! Inc.が2005年から実施していました。当時、Yahoo! Inc.とのつなぎ役をやっていた社員がそれを見て「すごい!これ日本に持ってきたい!」と考えて、有志でスタートしました。

池澤 私は昨年参加しました。面白いですよね!

村上 ありがとうございます。池澤さんは実際に作る側としての参加は、昨年の「Open Hack Day3」が初めてだったんですよね。

池澤 そうなんです。ヤフーの社員の方と一緒に参加しました。ハッカソンの審査をすることはあるんですが、ハッカソンに出場する側になったのは昨年の「Hack Day」が初めてでした。参加者になったのはこれまで3回くらいしかなくて、そのうちの1回です。

f:id:blog-media:20160219105426j:plain

大西 今年はかなり規模が大きかったですよね。1日目は24時間の開発、2日目は一般公開して、ネットでの投票も実施していて。

村上 一時期は、わいわい遊んでるだけと思われてしまい、潰れかかったこともあるんです。でも、社内の有志で集まったプロジェクトメンバーの強い思いがあってなんとか続けていました。2012年に僕がヤフーに戻ってきてからは、自分でイベントのオーナーをやっています。もちろん、今でも「24時間徹夜で開発」は続いています。

大西 エンジニア全員が参加するんですか?

村上 自由参加です。会場のキャパシティの問題もあって、参加するのはだいたい毎回300人ちょっとですね。社内外含めエンジニアのゆるいコミュニケーションをたくさん作ろうとしています。

大西 前編で伺ったフリーアドレスの話と通じるものがありますね。

村上 ヤフーで行う「Hack Day」には大きな目的が2つあるんです。1つは、普段の業務と関係なく「自分が作りたいものをつくる」こと。新しい視点、サービスに活かせるようなネタ出しの機会となります。もう1つは「社員同士の横のつながりを太くする」こと。普段一緒に仕事をしていても、誰が何をできるのかって、なかなか分からないじゃないですか。一緒にものを作ると「あいつすごいよね」って分かります。いきなりよく分からないバックエンドを作っていたり、趣味で画像解析だけ作っていたり。みんなの得意技を披露できるいい機会になるのが大きいですね。

大西 普段顔を合わせない人と一緒に取り組む機会があるのはとてもいいですね。はてなでも3日間の開発合宿があって、似たような感じでやっています。「Hack Day」の成果物の審査はどうやるんでしょう?

村上 プレゼンで、90秒一本勝負です。80チームくらいあって、寸劇あり、ライブデモあり。ライブデモはだいたい動かない(笑)。

f:id:blog-media:20160219105446j:plain

大西 かなり楽しそうですね!

村上 ヤフーの社内で使っている内製のチャットツールがあるんですが、それも「Hack Day」から生まれました。以前は「Yahoo!メッセンジャー」(編注:2014年3月26日にサービス終了)を使っていて、あれをもっとモダンにしたいという人が、社内で開催した「Hack Day」に出しまして。

池澤 あっ、そうなんですか!

村上 Modern Yahoo Messengerの略で「MYM」という名前です(笑)。それがなんとなく便利で、こっそり運営されてたのを、僕がヤフーに戻ってきたときに発見して、今は公式ツールになっています。社長の宮坂(宮坂学さん)も書き込んでいます。

大西 Slackみたいな感じですか?

村上 そうですね、もうちょっとだけシンプルで、「いいね」ボタンみたいなものがあって、僕らはそれを「ずきゅーん」って呼んでるんですけど(笑)。ボタンを押すと「ずきゅーん」ってアニメーションが動くんですよ。それが20~30くらい溜まるとボールド+赤い表示になって、すごく承認欲求が満たされる感じです。「全社部屋」(全社員が入れるグループチャット)というものがあるんですが、今も4,000人以上がアクティブな状態になっていますね。

池澤 オフィスを案内していただいたときに、広すぎて、社内でコミュニケーションを取るのが難しいんじゃないのかな?と思いましたけど、全然そんなことないですね。

f:id:blog-media:20160219105429j:plain

村上 あまりに「全社部屋」が大きくなりすぎちゃったので、もうちょっとゆるい部屋を作ろう!という話になって、「全社雑談」というのができました。あんまり「全社部屋」で話していると迷惑だから「全社雑談」でお願いします!なんて言っていたり。

大西 雑談でも千人単位の規模なんですよね(笑)。

村上 そうそうそう(笑)。結構趣味の部屋や同好会活動も活発なんです。僕はジャズ同好会の顧問をやっていて、ジャズ同好会はジャズ同好会の部屋があって、日々音楽に関する話をしています。

大西 はてなではSlackを使っているんですが、やはり似たような感じです。一人の趣味が複数あるのでチャンネル数がどんどん増えていきますよね……。

エンジニアに重要なのは「ポジティブ」。自分の好奇心に正しく向き合えているか

大西 村上さんはヤフーにエンジニアとして入社して、今は執行役員をされていますね。経営に参画された転機みたいなものは何だったんですか?

村上 僕はもともと学生時代に、仲間と一緒にネットベンチャーを立ち上げていて、その会社がヤフーに買収されたことで2000年に入社したんです。日本のガラケーのインターネット、その黎明期からずっといろいろなことをやっています。

f:id:blog-media:20160219105434j:plain

村上 買収された会社の社長だった人がヤフーの社長室に配属されたんですね。その人が買収案件や提携案件を手掛けはじめたところに、僕が個人的に技術面でアドバイスすることが多くなりました。「この会社どう思う?」「いいんじゃない?」「どこがいいの?」「技術的に結構いけてるよ」みたいな話をしていて。それが実際の業務提携の話につながるということが何度かあって、だんだん引きずり込まれて関わるようになりました。

大西 そこからマネジメントや経営に?

村上 具体的に変わったのは、親会社のソフトバンク(現:ソフトバンクグループ)がボーダフォンを買収したときです。最初の出向メンバーの1人になりました。端末に「Yahoo! JAPAN」のボタンをくっつけてガラケーでモバイルインターネットをする、という時代です。そこで開発のとりまとめなどディレクターのような仕事を多くするようになりました。ガラケー自体の要件定義などもやって、役割が増えていって、気づいたらこうなっていた(笑)。

大西 エンジニアと経営者、それぞれの仕事をどんな比重でやっているんですか?

池澤 確かに……お話を聞いているとどちらもされていますよね。

村上 自分でサービスのコードを書くことは、さすがにもうないです。それでも新しい技術が出ると一応、サンプルコードを触ってみてはいますね。アプリを作るときにも、何がイケているのか、どういう技術なのか、自分でやってみないと適切な判断ができないので。

大西 アプリ開発を取り巻く技術の進化がどんどん速くなっていると思うんですが、その辺はどう対応しているんでしょう。

村上 もうそれは頑張って追いつくしかないと思っていますね。

池澤 情報収集はどうやっているんですか?

村上 Google I/OやWWDCのような大規模なイベントのタイミングで、ベータ版やGM(ゴールデンマスター)版が出るので、そこを触っていくことが多いですね。

池澤 確かにイベントはいい情報源ですね!

f:id:blog-media:20160219105427j:plain

大西 体制が大きく変わるなか、会社としてエンジニアに求めるものも変化しているんじゃないかと思います。そのポイントをお聞かせください。

村上 「ポジティブかどうか」が最も重要です。ポジティブって何かというと、好奇心なんですよね。エンジニアは好奇心のかたまりだと思っています。よく分からないけど新しいものが来た!というときに、そこに乗れるかどうか、それをちゃんと自分の中で消化できるかどうか。

大西 技術への追従も大事ですしね。

村上 好奇心を持ったらどう行動するか、自分がそれに正しく向き合えているか、という点がエンジニアとして大事だと思っています。採用面接でもそこを突っ込んで質問することが多いです。正しく向き合えていると、たとえ技術が移り変わったとしてもなんということはない。自分自身も学生時代から移動体通信が好きでずっとやっていたら、当時の超マイノリティが今はマジョリティになったというだけなので。

大西 スマホの普及スピードはすごかったですね……。

村上 ヤフーに最初に入った2000年なんて、1人でガラケーのサービスを作っていたけど、誰もサポートしてくれない(笑)。みんなPC向けサービスで忙しくて、質問しても教えてもらえないというところに、当時の社長がやってきて「ケータイでインターネットとかやらないよね」とか言われてへこんで、じゃあなんでモバイルの会社を買収したんですか、なんて思ったりして。そこから比べるとだいぶ良い世の中になりました。

大西 「チーフ・モバイル・オフィサー」まで設置するようになりましたもんね。

村上 そうですよ!(笑)

1on1、勉学休職制度……エンジニアがやりたいことを突き詰められる仕組みを作る

池澤 エンジニアのキャリアパスについても教えてください!

村上 2つのラインを用意しています。マネジメントの役職と、プロフェッショナルを極めるコース。その行き来は自由で、どちらに進んでも給料は変わらないように設計されていますし、適材適所でキャリアが積めるようになっています。そのために、「1on1ミーティング」を非常に重視しています。

池澤 「1on1ミーティング」、前編で工藤さんから伺いました。週1回面談するんですよね。

村上 「1on1ミーティング」で上司と部下がキャリアについてしっかり話せる場を設けています。また、半年に1回は「人財開発会議」を開いて、上司が部下について「この人はこういう仕事をしてきた」「こういうことが得意だ」「将来こういうことをやりたいと言っている」とプレゼンテーションするんです。僕の場合、自分の部下の人財開発会議をやりつつ、他の部署から上がってきた結果を全社分見るんですよ。

大西 全社ですか……すごい。

村上 もちろん、各事業部長もその人についてプレゼンテーションを行います。最終的には、全員で戦略的なローテーションも含め育成方針について話し合うんですね。会社としてはいろいろな経験を積んでほしいと考えているので、メディアを長くやっていた人がECに異動したり、ECの人がペイメントに異動したりもします。

f:id:blog-media:20160219105431j:plain

池澤 この間、黒帯の方が大学院に入るという話を知ってびっくりしました。それも育成方針の一部なんでしょうか。

村上 iOSアプリの黒帯のことですね。最近できた「勉学休職制度」の利用者の第1号です。彼はすごく面白い人で、学生時代は数学を専攻していて、iOSアプリの開発を通して数学にかかわり、あらためて数学に目覚めたんです。

池澤 えー。すごい。

Tumblr
休暇 - 制度・環境 - 採用情報 - ヤフー株式会社

村上 彼は、ヤフー社内でエンジニアの数学のレベルを上げるために数学の勉強会を始めたんですが、自分で教えているうちに、もっと数学を極めなくちゃと思ったらしくて。

 これまでは大学院に行きたいと思ったら会社を辞めるしかなかったんです。でもヤフーにはインターネット関連技術の研究開発を行う「Yahoo! JAPAN研究所」がありますし、今いるデータサイエンティストも研究者から転身した人が多い。大学院で学んで戻ってくるのは絶対会社のためになります。そのほかにも、2015年10月に従業員の博士号取得にかかる費用などを支援する制度を開始していて、データサイエンティスト1名が京都大学大学院に進学しています。

大西 専門の道を究めることって、マネージャーに比べるとなかなか評価しづらいと思っています。そのあたりはどうお考えでしょうか。

村上 そうそう、そこは課題としてありますね。専門性をどのように正当に評価するのかについては、我々もまだ悩みながらやっているというのが本当のところです。キャリアパスというと一般的に、エンジニアがシニア世代になったときにどうするかということが課題なんですよね。ある程度年次が進んだらマネジメントをしなければならない、コードは書いてはいけないという考え方は、そろそろやめた方がいいと思っています。

大西 向き・不向きはありますよね。

村上 マネジメントに向いている人にはもちろんチャレンジしてほしいけど、向いていない人を無理矢理マネージャーにするのはよくない。キャリアが止まってしまいますよね。それはすごい損失だと思っています。やりたいことを突き詰めてそれをちゃんと評価する仕組みを会社として用意したい。

f:id:blog-media:20160219105421j:plain

池澤 難しそうですね。

大西 そうなんです、難しいんです……。エンジニアの場合、アジャイルの導入を進めていくうちに開発フローに興味を持って、そこからマネジメントに進みやすくなったんじゃないかと個人的には考えています。

村上 それはあるかもしれないですね。ファシリテーションを覚えて、ディレクターに近い仕事をして、そこでマネジメントの面白さを覚えて、マネージャーをやりたいと言う社員もいます。

池澤 新体制で本当にいろいろなことが変わったんですね。

村上 そうですね。この3年で一気に変わりました。今は各サービスのマネージャーの半分くらいがエンジニア出身なんですよ。昔は企画の人ばかりがマネージャーになっていたけど、だんだんエンジニア系の人が多くなってきました。

大西 ヤフーさんに抱いていた印象がかなり変わりました。「爆速」は知っていましたが、思った以上にベンチャーに近い感じの開発をされているんですね。工藤さんに伺ったオフィス環境から、村上さんのお仕事の話、新体制での現場の変革まで、非常に面白いお話を伺えました。ありがとうございました。

池澤 ありがとうございました!

§ § §

池澤 フリースペースや1on1ミーティング、黒帯制度など、エンジニアのキャリアを非常に大事にしていて、会社全体で柔軟に考えていらっしゃいましたね。私にとって身近なHack Dayのお話も聞けて楽しかったです。

大西 ウォーターフォールからアジャイルへ、「サービス愛を持つな」から「サービス愛を持て」など、新体制での変化が思った以上に大きかったのに驚きました。さまざまな制度やイベントも勢いがすごいですね。はてなでもヤフーさんを見習ってもっと面白くしていかないといけないなと感じました。

池澤 それでは、また次回お会いしましょう!

写真:小高 雅也

'); $backTopNav.appendTo($('.no-entry .entry-content')); } ////////////////////////////////////////////////////////// /* /* カテゴリ **/ function setLocalNav(){ // 右カラム:イベントレポートのナビ生成 var $reportNav = $('#js-report-nav'); if ( $reportNav.length > 0 ) { var reportCatParentIndex = 2; var reportCats = itseCategory[reportCatParentIndex][1]; $.each(reportCats,function(index, val) { $('
  • '+itseCategoryText[reportCatParentIndex][1][index]+'
  • ').appendTo($reportNav); }); } // 右カラム:コラム・連載のナビ生成 var $columnNav = $('#js-column-nav'); if ( $columnNav.length > 0 ) { var columnCatParentIndex = 1; var columnCats = itseCategory[columnCatParentIndex][1]; $.each(columnCats,function(index, val) { $('
  • '+itseCategoryText[columnCatParentIndex][1][index]+'
  • ').appendTo($columnNav); }); } } function setClassCategories(){ $('.categories a').each(function(){ if(!$(this).hasClass('.urllist-category-link')){ $(this).addClass('urllist-category-link category-'+$(this).text()); } }); } setLocalNav(); setClassCategories(); ////////////////////////////////////////////////////////// /* /* カレンダー **/ var eventData; var Calendar = function (elm) { this.$elm = elm; } Calendar.prototype.init = function () { this.$calendar = null; this.calendarDate = {}; this.settings = { year: 0, month: 0, weekValue: ['æ—¥', '月', '火', 'æ°´', '木', '金', '土'], areaClass: 'calendar', activeDateClass: 'active-date', prevNavClass: 'prev', nextNavClass: 'next', sunClass: 'sun', satClass: 'sat', todayClass: 'today', emptyClass: '', headerFormat: 'yå¹´m月', emptyValue: ' ' } var date = this.getDate(); this.calendarData = { year: date.year, month: date.month, date: date }; this.today = date.days; this.currentMonth = date.month; this.currentYear = date.year; this.setup(); } Calendar.prototype.getDate = function () { var date = new Date(); var toYear = date.getFullYear(); var toMonth = date.getMonth() + 1; var toDays = date.getDate(); var result = {}; result = { year: toYear, month: toMonth, days: toDays }; return result; }; Calendar.prototype.getPrevDate = function () { var result = { year: this.calendarData.year, month: this.calendarData.month }; if (result.month === 1) { result.year--; result.month = 12; } else { result.month--; } return result; }; Calendar.prototype.getNextDate = function () { var result = { year: this.calendarData.year, month: this.calendarData.month }; if (result.month === 12) { result.year++; result.month = 1; } else { result.month++; } return result; }; Calendar.prototype.zeroFormat = function (v, n) { var vl = String(v).length; if (n > vl) { return (new Array((n - vl) + 1).join(0)) + v; } else { return v; } }; Calendar.prototype.weekClass = function (weekNumber, targetDate) { var date = this.getDate(); var classArr = []; var classStr = ''; if (weekNumber === 0) { classArr.push(this.settings.sunClass); } else if (weekNumber === 6) { classArr.push(this.settings.satClass); } if (targetDate && targetDate === '' + date.year + this.zeroFormat(date.month, 2) + this.zeroFormat(date.days, 2)) { classArr.push(this.settings.todayClass); } if (classArr.length > 0) { classStr = ' class="' + classArr.join(' ') + '"'; } return classStr; }; Calendar.prototype.createBaseHTML = function () { var htmlStr = ''; htmlStr += '\n
    \n'; htmlStr += '
    \n'; htmlStr += '
    \n'; htmlStr += '
    \n'; htmlStr += '
    \n'; htmlStr += '
    \n'; htmlStr += '
    \n'; htmlStr += '
    \n'; htmlStr += '
    \n'; this.$calendar = $(htmlStr); this.$calendar.addClass(this.settings.areaClass); this.$calendar.find('.calendar-month').addClass(this.settings.activeDateClass); this.$calendar.find('.calendar-prev').addClass(this.settings.prevNavClass); this.$calendar.find('.calendar-next').addClass(this.settings.nextNavClass); }; Calendar.prototype.createBody = function () { var self = this; var year = this.calendarData.year; var month = this.calendarData.month; var lastdays = new Date(year, month, 0); var forDate = new Date(year, month - 1, 1); var emptyCell = '
  • ' + this.settings.emptyValue + '
  • \n'; var rowCount = 1; var htmlStr = ''; var i; var j; var len; htmlStr = '\n'; htmlStr += '\n'; htmlStr += '\n'; this.$calendar.find('.calendar-body').html(htmlStr); }; Calendar.prototype.setHeader = function () { var headerText = this.settings.headerFormat.replace('y', this.calendarData.year).replace('m', this.calendarData.month); this.$calendar.find('.calendar-month').html(headerText); }; Calendar.prototype.setup = function () { var self = this; this.createBaseHTML(); this.setHeader(); this.createBody(); // ヘッダー内、左右のリンクをクリックしたときの処理 this.$calendar.find('.js-change-month a').on('click', function () { var mode = $(this).attr('href').replace(/^#/, ''); if (mode === 'prev') { self.prevMonth(); } else if (mode === 'next') { self.nextMonth(); } return false; }); this.$elm.append(this.$calendar); }; Calendar.prototype.changeCalendar = function (year, month) { var date = this.getPrevDate(); if (year && month && String(year).match(/^[0-9]{4}$/) && String(month).match(/^[0-1]?[0-9]$/)) { this.calendarData.year = Number(year); this.calendarData.month = Number(month); this.setHeader(); this.createBody(); } }; Calendar.prototype.prevMonth = function () { var date = this.getPrevDate(); this.changeCalendar(date.year, date.month); }; Calendar.prototype.nextMonth = function () { var date = this.getNextDate(); this.changeCalendar(date.year, date.month); }; ////////////////////////////////////////////////////////// var getEventData = function () { var d = $.Deferred(); // dataを作る var data = {}; eventSchedule.forEach(function(v, i){ var date = new Date(v.date); var event = { category: v.category, year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate(), url: "http://www.itstaffing.jp" + v.url, title: v.title, }; data[i+1] = event; }); // ここまで d.resolve(data); return d.promise(); } if ($("#calendar").length > 0) { var getData = getEventData(); getData.then(function (data) { eventData = data; //console.log(eventData); var calendar = new Calendar($("#calendar")); calendar.init(); }); } //}; }); }();