【iMac】iMac高速化計画 外付けSSDを起動ディスクにする
iMac(Late2012)のハードディスクが下手ってきたのか何をするにも超遅いので、お手軽高速化計画として外付けSSDを起動ディスクにしてみました
1.SSDとケースを選ぶ
2.ケースにSSDを入れる
3.iMacに接続する
4.OSをダウンロードする
5.SSDを起動ディスクにする
1.SSDとケースを選ぶ
今回はAmazonで購入しました
・SanDisk 内蔵 2.5インチ SSD / SSD Ultra 3D 1TB SATA3.0
・Salcar USB3.0 2.5インチ 9.5mm/7mm厚両対応 HDD/SSDケース
この時点の価格はSSD ¥12,100 ケース¥1,180です
AppleでiMacを新規購入する際、1TBのSSDをオプション購入すると¥66,000 + 税なので
かなりお得です
SSDを500GBにすると¥9,000程で買えますがその差は¥3,000程しかないので予算があるなら容量の大きい方をお勧めします
2.ケースにSSDを入れる
箱から取り出します
SSDは1TBの容量があるとは思えない程かなり薄いです
今回選んだSalcarのケースはドライバーなどの工具が一切必要ないのが特徴です
ケースの挿入口を開けます
SSDをケースに挿入し、奥まで差込ます
3.iMacに接続する
付属のケーブルでiMacにUSB接続します
「セットしたディスクは、このコンピューターで読み取れないディスクでした。」という警告が表示されるので「無視」を選択します
アプリケーションから「ディスクユーティリティ」を起動し、消去を選びます
・名称:好きな名前にしてください(今回は製品名SanDisk Ultra 3D SSDにしました)
・フォーマット:「APFS」を選択します(High Sierra以前のOSはフォーマットを「Mac OS拡張(ジャーナリング)を選びます)
・方式:「GUIDパーティションマップ」を選択します
消去を選択します
消去が終わると完了を選択します
4.OSをダウンロードする
iMacのApp Storeから「macos」と検索して最新のmacOSのデータをダウンロードします
起動したら続けるを選択します
同意するを選択します
全てのディスクを表示を選択します
先ほど初期化したSSDを選択してインストールを選択します
インストールが開始されます
インストールが完了すると初期設定を行います
内臓HDDをSSDに交換をしたいけどハードルが高いとお考えの方は¥13,000程で古いiMacでもストレスなく使える様になりますので是非お試しください
今回購入したSSDは左から2番目です
一番右はタイムマシン用の2TBのハードディスクです(SSDに比べるとかなり大きいですね)
【Swift】CSVファイルをiOSアプリのデータとして取り込む
iOSアプリの中で大量のデータを検索して表示させるには、CSVファイルをXcodeに取り込んで配列にしてしまうのが簡単です。
使い方としてはクイズの問題と回答、年号一覧等が考えられます。
では実際にAppsにアップされている自作アプリを元に以下の順で解説していきます。
- 二次元配列:縦横の連続したデータが入る形式でエクセルの表みたいなイメージ
1.CSVをXcodeに取り込む
エクセルから保存形式をCSVにしてファイルを作成します
今回のCSVはこんな感じです
列としては「年号」「年号のふりがな」「和暦」「西暦」「時代」「改元理由」「主な出来事」の並びになっています
Xcodeのバージョンは11.3です
CSVファイルをXCODEのプロジェクトの中にドラック&ドロップします
「Finishi」をクリックします
プロジェクトの中に「gengo.csv」が追加されました
拡張子「csv」は自動的に付加されます
- プロジェクト:ソースコードや画像、ファイルを取りまとめた集合体
- 拡張子:ファイルの種類を表したもの
2.SwiftでCSVファイルを二次元配列に書き込む
import UIKit
var gengoStr: Array<Array<String>> = // 元号csv->配列
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let csvPath = Bundle.main.path(forResource: "gengo", ofType: "csv") {
do {
var csvString = try NSString(contentsOfFile: csvPath, encoding: String.Encoding.utf8.rawValue) as String
csvString = csvString.replacingOccurrences(of: "\r", with: "")
let rowArray:Array = csvString.components(separatedBy: "\n")
rowArray.forEach {
let items = $0.components(separatedBy: ",")
gengoStr.append(items)
}
} catch {
// エラー
}
}
}
}
二次元配列の変数「gengoStr」を定義します
var gengoStr: Array<Array<String>> =
- 二次元配列:縦横の連続したデータが入る形式でエクセルの表みたいなイメージ
- 変数:データを入れる箱みたいなもの(中身の入れ替え可能)
変数「gengoStr」の中身は...
年号,年号のふりがな,和暦,西暦,時代,改元理由,主な出来事
年号,年号のふりがな,和暦,西暦,時代,改元理由,主な出来事
年号,年号のふりがな,和暦,西暦,時代,改元理由,主な出来事
という感じでエクセルで作ったCSVファイルの中身がコピーされます
ちなみに変数「gengoStr」は好きな名前に変えれます
var 好きな名前: Array<Array<String>> = []
override func viewDidLoad() {
super.viewDidLoad()
の後に以下のコードを貼り付けます
if let csvPath = Bundle.main.path(forResource: "gengo", ofType: "csv") {
do {
var csvString = try NSString(contentsOfFile: csvPath, encoding: String.Encoding.utf8.rawValue) as String
csvString = csvString.replacingOccurrences(of: "\r", with: "")
let rowArray:Array = csvString.components(separatedBy: "\n")
rowArray.forEach {
let items = $0.components(separatedBy: ",")
gengoStr.append(items)
}
} catch {
// エラー
}
}
ぐちゃぐちゃ書かれてますがとりあえず貼り付けましょう
CSVの名前を変えた場合は、以下のコードの”gengo”を打ち替えてください
if let csvPath = Bundle.main.path(forResource: "gengo", ofType: "csv")
変数「gengoStr」の名前に変えた場合、以下のコードの「gengoStr」を打ち替えてください
rowArray.forEach {
let items = $0.components(separatedBy: ",")
gengoStr.append(items)
}
3.二次元配列からデータを取り出す
@IBOutlet weak var seireki: UITextField!
@IBOutlet weak var warekikana: UILabel!
@IBOutlet weak var wareki: UILabel!
@IBOutlet weak var jidai: UILabel!
@IBOutlet weak var dekigoto: UILabel!
@IBOutlet weak var warekimei: UILabel!
@IBOutlet weak var riyu: UILabel!
func gengosearch() {
for i in 0 ..< 2048 {
if Int(seireki.text!)! == Int(gengoStr[i][3])! {
warekikana.text = gengoStr[i][1]
warekimei.text = gengoStr[i][0]
wareki.text = gengoStr[i][2]
jidai.text = gengoStr[i][4]
riyu.text = gengoStr[i][5]
dekigoto.text = gengoStr[i][6]
}
}
}
@IBAction func kensaku(_ sender: Any) {
gengosearch()
}
西暦:テキストフィールド
和暦かな 〜 出来事:ラベル
検索:ボタン
テキストフィールドとラベルをアウトレット接続します
画面の項目を右クリックしながらソースコードまで引っ張ります
西暦:seireki
和暦かな:warekikana
和暦名:warekimei
和暦:wareki
時代:jidai
出来事:dekigoto
- アウトレット接続:画面のテキストフィールドやラベルに名前を付けてプログラムで使えるようにする
ボタンをアクション接続します
検索:kensaku
- アクション接続:動作を定期する
func gengosearch() {
for i in 0 ..< 2048 {
if Int(seireki.text!)! == Int(gengoStr[i][3])! {
warekikana.text = gengoStr[i][1]
warekimei.text = gengoStr[i][0]
wareki.text = gengoStr[i][2]
jidai.text = gengoStr[i][4]
riyu.text = gengoStr[i][5]
dekigoto.text = gengoStr[i][6]
}
}
}
これもぐちゃぐちゃ書かれてますがとりあえず貼り付けましょう
二次元配列の中はこうなります
年号:gengoStr[1][0]
年号のふりがな:gengoStr[1][1]
和暦:gengoStr[1][2]
西暦:gengoStr[1][3]
時代:gengoStr[1][4]
改元理由:gengoStr[1][5]
出来事:gengoStr[1][6]
最初の1が行数、次の0〜6が列になります(0スタートです)
gengoStr[1][0] は1行目の1列目、つまり1行目の年号になります
シュミレーターでテストすると
西暦を入力して検索ボタンをタップすると一致するデータが表示されます