Spring Day 2016 行ってきた!マイクロサービスの導入事例に触れた刺激的な一日。

行ってきました、Spring Day 2016・・・そう、それは座席とトイレ確保の戦い
springday2016.springframework.jp
Springの大規模なイベントは、日本では2回目らしい。
前回はSpring Summerというイベントだったようです。
運営は日本Springユーザ会が行っており、勉強会の発表者なども
募集しているようですので、気になる方は門戸を叩いてみてはいかがでしょうか。

今回のイベントは400人以上が参加しました。
そこまで大きな会場ではないので、人口密度がとても高く立ち見もあるほど!
セッションとセッションの間の休憩は座席確保を迫られ、
トイレには待ち行列ができるほど!さすがSpringの祭典!?
41階のセミナールームから見る眺望はとてもよかったです!
f:id:yasay:20161118205558j:plain

下記のセッションを見てきました。
10:00 ~ 11:00 Spring Framework 5.0
11:00 ~ 12:00 事例で知る!大規模エンタープライズ開発現場のリアル
13:00 ~ 14:00 Spring Securityで作るWeb APIアクセス制御の最適解
14:00 ~ 15:00 LINEにおけるSpring Frameworkの活用
15:00 ~ 16:00 楽天トラベルとSpring
16:00 ~ 17:00 40Tips & Tricks for Spring in IntelliJ IDEA
17:00 ~ 18:00 Springで実現するSmartNewsのニュース配信基盤

では、セッションの内容をメモ書き程度の内容ですが振り返ります。↓↓

- Spring Framework 5.0
f:id:yasay:20161118123136j:plain
本セッションでは、Spring Framework5.0の新機能の紹介と、
リアクティブプログラミングに関するライブラリの紹介などがありました。
ベルギーの著名なSpringのコミッター、ステファン・ニコルさんの講演

■Spring 4.3
リリースまでに9ヶ月の間隔があったが、
これからはもっとリリース間隔を短くしたいと思っている。

■Spring 5
5.0はJDK8+, Servlet 3.1+, JMS 2.0+, Junit5+をサポート
下記のような主要なフィーチャーがある。
Performance improvements,
JDK9,
Jigsaw modules,
HTTP/2 and Servlet 4.0,
Reactive architectures

■Spring 5 - パフォーマンスの改善
コンポーネントスキャンのパフォーマンス改善
→パフォーマンスメカニズムの改善。
 →クラスパススキャニングのためのアノテーションが新設された。
 →大規模アプリケーションの場合、インデックスを使えば迅速にコンポーネントスキャニングを完了させることができる。
メタデータのキャッシュ化
・AntPathMatcherの書き換え
・ゼロコピートランスファー
→ファイルの転送時にCPUを使わない転送方法。データの転送をクライアントに直接できる機能。

■Spring 5 - JDK9への対応について
JDKは来年の3月にリリース予定。Spring5のGAは来年7月を予定している。
・Jigsaw modulesの活用
・パッケージエクスポートとか
・HTTP/2への対応について
→JDK9によるHTTP2対応も。

■Spring 5 - リアクティブプログラミング
・なぜリアクティブプログラミングを使うべきなのか。
全てのアプリケーションはシンプルな構成となっていた。
マイクロサービスや分散システムのために生まれたリアクティブプログラミング。
リアクティブプログラミングはスピードのためではなく、拡張ができ、アプリケーションが複数のリクエストを受けている時に安定性を保つ為のもの。

スケールを拡張した場合、プロセスを増やす、スレッドを増やす、これでもっと大規模な処理ができる。
だが、それにも限界がある。メモリ量にも限界がある。
リアクティブはノンブロッキング、そしてCPUをできるだけ最大限に使うという考え方がある。

スライドが共有されています。↓
speakerdeck.com


ステファンさんによるYoutube動画紹介とか(過去のセッションとか)
Reactive Web Applications with Spring 5 by Rossen Stoyanchev - YouTube
Developing Reactive applications with Reactive Streams and Java 8 by Brian Clozel, Sébastien Deleuze - YouTube
http://start.spring.io/
などなど


- 事例で知る!大規模エンタープライズ開発現場のリアル
NRIの社員の方による、オフショアを活用した大規模システム開発の現場での
標準化活動のポイントです。

数百人での大規模開発での事例での標準化というのは難しいということが語られていました。
オフショア特有の文化については勉強になりました。育ったらやめていくから人を育てられないってのはキツいですね。
セッションの内容的には私が普段よく使っている機能の話でした。

■画面設計のOut of memory error
・画面設計はステークスホルダーが多い為、そういった人たちを巻き込んだ顧客調整による標準化が必要。
・セッション領域を気軽に利用出来ないルール・仕組みを策定することについてルール例の紹介
→ルールを定めても破られるため、セッションを扱う処理を自動検知し、検証できるような仕組みや覚悟が必要。
→セッション領域のデータを、必要の無くなったタイミングで削除する機能の実装。
→Springなら簡単に行う方法が用意されている。
@SessionAttributes, sessionStatus.setComplete();
自前で作ろうとすると結構大変なんだけど、用意されていて便利だよね。

■ヒストリーバック時の有効期限切れ画面問題
・no-cacheとPOSTリクエストによって、戻るボタンを押した時の有効期限切れ問題が発生。
→まず、戻るボタンによる操作を許可するのか、許可しないのかを決定する必要があり。(今時戻るボタン使えないとか・・)
→戻るボタンを使うのなら、RedirectおよびGETを用いて、有効期限問題を解消しよう。
→戻るボタンを許可しないのなら、ツールバーの非表示による抑止だったり、JavascriptのhistoryAPIを用いてブラウザにダミー履歴を入れるとか。
→Springなら、FlashAttributeとredirectを使えば、簡単に実装できる。
これも自作しようとすると面倒くさい。

■エラーハンドリング問題
・エラーハンドリングを塗りつぶしてしまう問題(なかなかありえないだが、大規模オフショア開発では起きることらしい)
→エラー・例外ハンドリングの標準化ルールの策定。ハンドリングの対応・レイヤーの明確化など。
→例外をエラーコードに変換するコードの実装も大事。
→Springでは、@ExceptionHandlerを使えば、簡単に実装できる。

■Controllerクラス分割問題
・修正処理を登録用コントローラークラスにメソッドが入っていて、画面との対応がわかりにくい。
→標準化として、クラス分割ルールの作成は大事。Springの@RequestMappingは非常に柔軟。だからこそルールの策定が必要。
→1jsp = 1Controllerクラス、1業務に対して1Controllerクラスなど

■グローバル開発
・オフショア開発の場合、同じ質問がなんども飛んでくる場合がある。(イライラする)
→ログやマニュアルのグローバル化とか。

早期の標準化ルールの作成・展開、
ステークスホルダーを巻き込んだ上でのルール策定
ルール遵守させる方法の確立。検知する仕組みや自動的にルールを守ってしまうような仕組みづくり。


- Spring Securityで作るWeb APIアクセス制御の最適解
最近は本当にどこを見てもWeb APIだらけで、私もWeb APIを開発したことがあります。
Spring Securityも使っているので、その最適解というはとても興味がありました。
クラスメソッドの社員の方が、最近使われている認証方式について解説してくれました。

スライドが共有されています。↓

www.slideshare.net





- LINEにおけるSpring Frameworkの活用
■LINEってアーキテクチャのうち、Javaが41%を占める
→正直意外でした。
リポジトリ数と言うと、spring framework, spring mvcで547件・・・
spring bootで285って、かなりの数ですね。

■Spring採用が多い理由
・開発のサイクルがJava EEに比べると速い。
Java EEはB2Cのスケールが必要なWebサービスでの事例をあまり聞かない。
・社内にJava EEの経験ある人が少ない

■時代はMicroservices
→小さなapplication serverの組み合わせでおおきなサービスを実現
→spring, guice, Vert.x, Dagger2, avans, etc
→groovy, scala, ...
golang, perl, python, ...

■なぜSpring-bootか
XML書かなくていい
・アプリケーションの開発がわりと簡単に開始できる
uber jarでお手軽にdeployできる
Javaのわりに起動が速い

■開発事例:LINE Notify
・Redis sentinelによる冗長構成(Cache, Rage limit)
→KVSは基本的にRedisが人気
 →柔軟性・パフォーマンス・安定性・楽しい
・nginx → jetty
ACL管理, rewrite, Access log

■jettyの特徴
・コード読みやすい
・起動速い
→開発時に便利
・undertowより開発者多い(undertowって?)

■Fluentd
アクセスログの集計
→http statusコードの統計監視
・イベントログ
→Fluencyが最近は優勢、社内のストレージに保存

ちなみに、LINEは全てオンプレミスらしい。AWSなどのIaasを使っていない。

■Spring Bootのバージョンは上げにくい。
→関連モジュールも一気にバージョン上がるので、上げていくならこまめに上げていったほうがいい。

■spring-boot-starter-web
・安定している
・@GetMapping, @PostMappingとか便利

■spring-boot-starter-freemarker
・社内ではthymeleafと人気を2分している。らしい。
・IDEAの補完がfreemarkerの方が便利という説もある?
Apache Incubator入り、自動エスケープも入った。

■spring-boot-starter-redis
■spring-boot-starter-mobile
・User-Agentで判定するのに便利

■mybatis-spring-boot-starter
・社内のO/R Mapperはmybatis優勢
JPAは少ない
→B2Cでトラフィック予測難しい
・パフォーマンス問題起きた時の、MyBatisの安心感
・MyBatisのXMLをアップするとDBAがクエリ評価してくれるサービスとかもあるらしい

■MyBatis + Kotlin
XML辛い
Javaアノテーションでも書けるけど辛い
→複数行文字列書けない→複雑なクエリがない。
・なおでKotlinを採用 → 学習コストが低くて導入しやすいのがいい。
・groovyでも良かった

■デプロイ手法
github → jenkins →デプロイ
(途中でjenkinsを通すことで、テストが通ったもののみ許可される仕組み)

■実行環境
java, nginx on supervisord(自動再起動)

■Prometheus
■Dropwizard metrics

スライドが共有されています。↓

www.slideshare.net





- 楽天トラベルとSpring
楽天トラベルのアーキテクチャの変化
APIの数が増えてきた
APIの生まれ変わりが激しくなってきた
→多くの問題が(より)顕在化しました。

■直面した課題と解決へのアプローチ
1. APIドキュメントを最新に維持するには
昔、他社のAPIの使い方を習得するのに時間がかかることがあった
 →Documentが嘘をついている・情報が足りない
 →Exampleの不足
 →開発中のプロダクトのドキュメントが無い
・ドキュメントの管理・維持は大変。
 →Spring REST Docsでいこう
  →APIドキュメンテーションがある程度簡単に出来ます。
・Swagger+Springfoxでもっと良いドキュメントを作るのもあり。

2. シンプルにセッションを管理するために
・Sticky Sessions
→サーバーが落ちたら再ログイン。バランサーの設定だけですむ。HAではない。
・Session replication
→サーバーが落ちてもセッションを維持。HAである。設定・実装はASに依存する。
・Session clustering(Spring Session)
→Session Data store clustorを使用する仕組み。HAであり、AS問わず利用可能。必要なdependenyが増える?
・Spring Session
Servlet Filterで標準のHttpSessionをwrapする
 Spring Boot 1.4からAuto Configがある。
 楽天トラベルでは、Hazelcastをデータストアとして使用。
 Spring SecurityでCSRFトークンチェックもしている。

3. Microservice化する中でログの追跡をするには
・問い合わせが来た時のログ調査は手間がかかりすぎる。
・MDCというログの機能を利用し、ユニークIDをログに追加
・Spring Cloud Sleuth
・Logstash, Kibana

4. 同じプロパティの値を複数のプロパティで管理したくない
・Spring Cloud Configが便利

5. メンバーに使って欲しいライブラリを使ってもらうには・もっと簡単にAPIを実装する為に
・Spring Initializrはカスタマイズできる。
→社内で共通で使っているライブラリなどを放り込んで、
Spring Bootで初期プロジェクト起動をすることが出来るんだよ。
→Webからだけでなく、IDEからでもカスタマイズしたInitializrを利用することが可能。

6. 新しくきた人にSpringを覚えてもらうには
・みんながSpringの経験があるわけではない。
チュートリアルドキュメントを使って、全員が共通した知識を持てるようにする!

スライドが共有されています↓

www.slideshare.net







- 40Tips & Tricks for Spring in IntelliJ IDEA
正直、eclipseばかり使用し続けて、IntelliJ IDEAに疎い私にとってはとても勉強になる内容だった。
ただ、ちょっとハードル高かったかな。


- Springで実現するSmartNewsのニュース配信基盤
f:id:yasay:20161118205646j:plain
スマートニュース配信基盤の紹介と、そこで利用されているSpringの技術について。
登壇者はニュース配信基盤や管理コンソールの担当している方。
■配信基盤の紹介
・毎日250万人以上のユーザーへニュースを配信している。
・5万件以上の記事を配信
・1日(朝、昼、夕、夜)の定時Push通知
SmartNewsのニュース配信基盤は全てAWSで構築している。
・記事の収集、分析、配信など、それぞれの基盤が連携している。
■配信基盤における、Springの活用
・前身はSeasar2による旧基盤だった。
・旧基盤は先進的な技術要素があったが、もちろん少々の問題もあった。
・スマートニュースの強みは機械学習機械学習のような非サーバーサイドエンジニアの開発を向上させたかった。
→これらの問題を改善するために、Spring Bootを導入。
 →サービスを分割することで、個々に集中出来る。
 →高い開発効率。SpringFox/SwaggerによるAPIの可視化。

スライドが共有されています。↓
speakerdeck.com



・その他セッションのスライド
アメブロの大規模システム刷新と それを支えるSpring
Spring bootで学ぶ初めてのwebアプリ開発
Let's visualize your Spring Cloud Applications! #jsug #springday - Speaker Deck
Spring Day 2016 springの現在過去未来
Springを何となく使ってる人が抑えるべきポイント


- 所感
マイクロサービスの導入事例に触れた、刺激的な一日でした。
システムのライフサイクルの関係上、既存システム保守・回収を担当している方にとっては、
マイクロサービスの流行がすぐそこに来ていることを実感できないかもしれません。
そんな時こそ、マイクロサービスの導入事例に触れ、
自分達が担当しているシステムにマイクロサービスを導入した場合、どうなるかを妄想して欲しいと思います。

ちなみに帰りに外国人に道を聞かれましたが、しっかり答えることができましたw
これも、普段英語の勉強を行っているから出た成果だと思います。(道を教えた程度ですがw)
ステファン・ニコルさんの英語も聞き取りやすくて分かりやすかったですね。

今回シェアしてもらった技術要素について、私は追い続けたいと思います。
特にSpring Bootをもっと使いこなせるようになりたいです。

昼飯はリクルートの社員食堂で500円!安くておいしいサイコー!白身魚お好み焼き風です!
f:id:yasay:20161118213726j:plain

おしまい

Windowsで「tail -f」コマンドを実現する方法4選

tailコマンドは重宝しますよねー。
なのに、何故かWindowsにはデフォルトで入ってなくて、
なんとかしてtailコマンドを使いたいと思う時は多いはずです。
開発してるとログをtailで垂れ流したいですよねー。
そこで、自分がよく使っているツールを紹介したいと思います。
(備忘も兼ねて。)

www.vector.co.jp
「tail -f」をWindowsで実現するためのフリーソフトです。
メリットとしては対象のファイルを開くだけで簡単にtailが実現できることです。
デメリットとしては、他に応用が効かないこと。tailコマンドを習得することはできないです。


tech.guitarrapc.com
Microsoft信者の方はこの方法でtailコマンドを再現できますが、
やはりデメリットとしてLinuxコマンドではないため、応用が効きにくいことが挙げられます。

  • git bashを使う オススメ!

git-for-windows.github.io

Git for Windowsをインストールすると、
MINGWによるbashを使うことができます。これがなかなかオススメです。
メリットとしては
・tailコマンドだけでなく、Linuxの基本コマンドを普段から使える。
・当然Git用のコンソールとしても使えるのでバリバリGitが使える。
などが挙げられます。後述するConEmuと併用することで、
快適なコンソール環境を実現することも可能です。


qiita.com

Windows10 Anniversary Updateから導入された
Bash on Ubuntu on Windowsを使うことで、
簡単にtailコマンドを導入することができます。
もちろんtailだけでなく、様々なLinux基本コマンドを使用することが可能です。
ただし、64bit edition限定ですので、古いPCを使っている場合に
導入できない場合があります。


  • 番外:Windowsのコンソールをもっと快適に使う「ConEmu」を導入する。

conemu.github.io
ConEmuはWindowsのコンソールをとても快適にするためのツールです。
インストールされているコンソールツールを自動で検索して、
ConEmuを通して起動できます。
左右分割、上下分割をはじめ、ウインドウの透過や配色の変更など、
様々なカスタマイズ項目があります。
個人的にはgit bashまたはBash on Ubuntu on Windowsと、ConEmuの併用を
オススメしたいですね。

もちろん、上記以外にもたくさんの方法があります。
自分好みの環境を整えるために、いろいろ探し回ってみてください♪

「集まれSwift好き!Swift愛好会 vol12」に行ってきた。勉強会に行く意味とは何か。

今回は「集まれSwift好き!Swift愛好会 vol12」に参加してきました。

love-swift.connpass.com

主催はG's ACADEMY TOKYO BASEさんです。シャレオツな内装は
一度見ていたほうがいいくらいオススメです。
http://gsacademy.tokyo/news/2016/06/000164.htmlgsacademy.tokyo


肝心の内容については・・・
なんというか、ブログに書くことがない内容でした。
Apple TVに関するLTは少し面白いと思いましたが、
その後は内輪のみで進行しているような状況にも見えました。

つまり、参加メンバーはたくさんいるんだけど、一部コアな顔見知りのメンバーが
LTの内容につっこみを入れて盛り上がってる…そんな状況です。

うーん、参加する意味あったのかな。
勉強会で何か収穫を得ようとしても、
参加した意味がなかったって感じている人は
結構いるみたいなんですよね。下記の記事も参考になったり。

www.buildinsider.net

貴重な時間を消費しているわけなので、
参考にならなかった勉強会は二度と行かないわけですよ。

なので、これからは下記のような方針でいきたいと思います。

  • アウトプットを伴う勉強会に参加する。LT登壇も含めて。
  • 小規模な勉強会よりも、人気のある勉強会や大規模カンファレンスに参加してみる。
  • 意味がなさそうな勉強会に参加する暇があったら本読んで実践する。

実りが少ない勉強会だと、お酒の力で参加メンバーと交流することくらいしかないですよねw
「No Drink, No Hack」の文化に染まりつつあるかもしれませんww
(前回のVuls祭りで味をしめた!?www)

散らばっていた自宅のPC環境を再構築した話

我が家のPCは5つもあるんです。
しかも古いマシンが多いため、スペックが低いものが多く、
しかもそれぞれが異なる役割を持っています。

  • メディア管理用PCの構成図

f:id:yasay:20161031150943p:plain

f:id:yasay:20161031151500p:plain

BunBackup,Time Machineによる自動バックアップがメインの構成図になります。
大切な情報を日々守っています。

よくよく考えなくても、3台もPC使うのってあまり意味がないんですよね。
なぜなら↓

  • 常時起動はしない。つまりサーバーの役割を持つPCは我が家にはない。節約のため。
  • Windows PCを2台持つ意味って現状ほとんどない。一つのWindows PCに集約させたほうがデータ管理もしやすい。


なので、再構築しました。
以下、新しい構成図。
f:id:yasay:20161031151526p:plain
見て分かる通り、一番スペックの高いMac miniに全てを集約しました。
Windowsの資産(アプリ)はBootcampで構築したWindows10 Proへ。
開発はこれまで通りMac OS Xを使う。

これで家の中もスッキリしました!2台のPCがお蔵入りに。
再構築の肝はAdobe CS3のインストールです。
CS3がWindows10 Proの64bitエディションで動くかどうかでした。
Bash on Ubunutu on Windowsを使いたかったので、64bitは外せないのです。

いろいろなサイトで報告されている、
「AdobePDF.dll」ファイルが見つからない問題は、
インストーラーをadobeのサイトからダウンロードすれば解消されます。
お試しあれ。

主な作業一覧↓

  • Windows10 Proのライセンス購入
  • Bootcampセットアップ作業
  • adobe CS3 Master Collectionのインストール
  • プリンタのセットアップ(Mac/Win(Bootcamp))
  • Blu-ray書き込みソフトのインストール(Win)
  • 設置場所の変更・配線・USBハブの増設


作業中のこと

  • 3TBの外付けハードディスクが自動節電モードに移行しない問題の調査
  • キーボード・マウスの無線化

バックアップツールはBunBackupを今まで使っていたのですが、rsyncに移行を進めています。
完全移行できたらエントリーを書きたいと思います!


ひとまずお疲れ俺。
ダウンロードやインストールって結構時間かかるから
しばらくはやりたくない(´・ω・`)

AWS - Qiitaのチュートリアルを最初からやってみる。

今月は前半はRSウイルスに感染し、
後半はノロウイルスみたいな症状に感染してホントひどかったです。
今年はこれ以上ひどい目にあいたくないのでインフルエンザワクチン接種したい。

ところで、私は残念ながら業務でIaasを使う機会が少ないので、
最近はAWSのキャッチアップを行ってます。

今回は、Qiitaの記事「0から始めるAWS入門」の手順を踏んで
LAMP環境を構築しました。集中してやれば2時間位で終わります。
qiita.com

もくもくやっていく!

続きを読む

MacBook Airを購入しました!

MacBook Air 13インチを購入しました!
まさかこんなに早くゲットできるとは思わなんだ。

これがもし2、3年前にMacBook Airを購入したとしても
充分にそのパフォーマンスを活かしきれていなかったと思うんですよね。
なぜなら、最近のモバイルネットワークの充実があるからです。
今やMVNO格安SIMを使用してテザリングが出来る時代なので、
バッテリー残量と高速通信残量さえ気をつければ
外出先で気軽にインターネットが出来る時代。時代は変わるものですね!

↓とある日常の一コマ↓

嫁「一緒にアニメ見よー」
俺「無理、今開発してるから。」
嫁「・・・」
俺「MacBookがあれば、アニメ見ながらでもできるんだけどね。」
嫁「でも高いんでしょ?」

食いついてキタ━━━━(゚∀゚)━━━━!!

俺「まぁ、それなりの金額はするけど、整備済製品なら安く買えるかも
  このMacbook Air 13インチなら130,000円くらい・・・
  (Webサイト見せながら)」

嫁「高い。10万くらいで買えないかな?」
俺「お、SSDが128GBなら95,000円であるよ!これなら買っていい?」

これはいける(゚∀゚)!?

嫁「なんでMacなの?windowsならもっと安いのあるんじゃないの?」
俺「MacならXcodeが使えるし、UNIX準拠でゴニョゴニョ(略」
嫁「ふーん、しょうがないか。買っていいよ。」

(´⊙౪⊙)۶ッッッッィィィィイイイイヨッシャアアアアァァァァ!!!!

嫁「その代わり結婚記念日とクリスマスと誕生日、なしな」

(^ω^)・・・分かってた

というわけで、いろいろ前倒ししてMacBook Air 13インチを手に入れました!
決まったら行動早いでー!
f:id:yasay:20161019144146p:plain
速攻ポチってた。翌日届いた。




f:id:yasay:20161020005323j:plain
整備済製品なので、パッケージがちょっと違いますね。


f:id:yasay:20161020005443j:plain
よく見ると箱には「Apple Certified Refurbished」の文字が。


f:id:yasay:20161020005615j:plain
充電中。キーボードはそこそこ打ちやすいし、
デザインも最高、Officeを買えばWindowsすら不要になるしmac大好き。
早速SlackとかiTerm2とか入れました。


[f:id:yasay:20161020005812j:plain
懸念してたSSDの容量も100GB以上余ってる。
うん、大丈夫そう。メモリが8GBなのもポイント。
コーディングくらいなら余裕でこなせる。


f:id:yasay:20161020005958j:plain
この日のために大事に取っておいた、熊本復興支援ステッカーと、
8年くらい前に台湾で買ったステッカーを貼り付ける。
勉強会とか行くとMacBookを持った方々が多いので、結構こういう
ステッカーとか重要だと思います。ベタベタ貼るのは好みではないのですが。


これでSwiftの勉強会がますます捗ります!
このエントリーもMacBook Airで書きました!

[2016/11/10 追記]
新型Mac Book Proの登場とほぼ同時に、
Mac全品が値下げされました。おそらく為替の影響かと思われます。
japanese.engadget.com
私が買った整備品済み製品とほぼ同じ価格で、新品が買えますね!

mac mini(2011)を外付HDDからデータ移行して復活させました。他、最近取り組んでいること等。

子供から風邪をもらい1週間半くらい体調不良でした。

f:id:yasay:20161016203453j:plain

実は我が家のmac mini(2011)は一度ハードディスクがクラッシュしまして、
お亡くなりになったことがあります。1年位前。

家族の写真が大量に入ってたので、
あの時はどうしようかとかなり焦りましたが、なんとかデータを抽出。
今は外付けHDD2台とBlu-rayにバックアップしているので、大地震でも起きない限り、多分大丈夫。

当時はリカバリ手段としてインターネットリカバリを使用。
外付けHDDにOS X Lionをインストールし、内蔵ハードディスクは引っこ抜きました。

最近、Windows PCよりMac miniを使って開発をする頻度が多く、
本腰を入れて内蔵ハードディスクを復活させました。

きっとおいらの知らない間に子供が落としたんだそうに違いない(困惑)

では、やっていきます。

ハードディスク交換のためには、裏面の蓋を開けパーツを外していく必要があります。
分解は多くの方がエントリーを書いてるのでさっさと開けていきましょう。
f:id:yasay:20161016203641j:plain
wifiユニットと、ファンを外した状態。
空っぽのところにハードディスクがついてました。
分解するには星型ドライバーが必要です。
私はAmazonでAnexのT-6とT-8を購入しました。

  • ハードディスクを取り付ける

Amazonで1TBのHDDを購入。
コストパフォーマンスを重視したので、SSDは選択しませんでした。
f:id:yasay:20161016204705j:plain
左が壊れたハードディスク、右が新しいハードディスク。
ケーブルを取り付けていく。


f:id:yasay:20161016204813j:plain
ハードディスクが収まった状態。

  • 元に戻す

どのユニットもケーブルで繋がってるので慎重にもとに戻していきます。
f:id:yasay:20161016205006j:plain
これで蓋を閉じて終了。

  • ハードディスクを初期化する

起動後、[command]キー + Rキーを押しっぱなしにしてOS X ユーティリティを起動します。
f:id:yasay:20161016205416j:plain
画像を見て分かるとおり、El Captainからインストールできます。
これは外付けHDDにインストールしているmacがEl Captainなので、
El Captainで復元できる様子。
まずは「ディスクユーティリティ」を選択して、
ハードディスクを初期していく。


f:id:yasay:20161016205711j:plain
初期化完了!

  • El Captainを内蔵ハードディスクにインストールする

OS Xを再インストール」を選択して、
内蔵ハードディスクにインストールしていく。
f:id:yasay:20161016205847j:plain
しばらく待ちます。

  • なんと、外付HDDからデータ移行できた!

データ移行どうしようかなと悩んではいたんですが、
移行ウィザードが起動してくれました!これは助かる!
f:id:yasay:20161016213745j:plain
一番上の「Mac, Time Machine バックアップ、または起動ディスクから」を選択する。


f:id:yasay:20161016213913j:plain
移行元の外付HDDを選択する。


f:id:yasay:20161016214059j:plain
転送する情報を選択。今回は全部移行。


f:id:yasay:20161016214234j:plain
転送中。結構時間かかります。気長に待ちます。


  • 移行完了!

無事に移行完了!スムーズにいけました!
インストールしていたアプリや、データなどもそのまま!
f:id:yasay:20161016214502j:plain


ついにmac mini(2011)が復活を遂げました!
これで開発も捗ります!今後はメモリを16GBまで増設したいと思います!


  • 最近取り組んでいること

最近は、Selenium×JUnit×Jenkinsによる連携と、
Spring4のMockRestServiceServerを用いた
APIのMock化に取り組んでいます!
少しずつブログでアウトプットしていければと思います!

  • 以下、参考資料

■交換したハードディスク
https://www.amazon.co.jp/exec/obidos/ASIN/B007XBU69O/henjinkutsu-22/ref=nosim

■使用したドライバ
https://www.amazon.co.jp/アネックス-ANEX-ヘクスローブドライバーT型-T6×50-No-6300/dp/B002SQLDSM/ref=sr_1_2?s=computers&ie=UTF8&qid=1476623987&sr=8-2&keywords=anex+t-6
https://www.amazon.co.jp/gp/product/B002SQLDU0/ref=pd_cp_60_2?ie=UTF8&psc=1&refRID=FE9JTGHANN0MHK10J57Y


■参考にした手順
[Apple]Mac mini (Mid 2011)のハードディスクを換装する 完全版 « 変人窟(HJK)