ナトーアプリ工房

iOS開発やApple製品の情報発信ブログです

【iMac】iMac高速化計画 外付けSSDを起動ディスクにする

iMac(Late2012)のハードディスクが下手ってきたのか何をするにも超遅いので、お手軽高速化計画として外付けSSDを起動ディスクにしてみました

 

  • SSD:容量の大きいメモリ(USBメモリのデカイ版みたいな感じ)

 

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ケース

f:id:nato99001:20200112151954j:plain

 

この時点の価格はSSD ¥12,100 ケース¥1,180です

AppleiMacを新規購入する際、1TBのSSDをオプション購入すると¥66,000 + 税なので

かなりお得です

SSDを500GBにすると¥9,000程で買えますがその差は¥3,000程しかないので予算があるなら容量の大きい方をお勧めします

 

 2.ケースにSSDを入れる

箱から取り出します

f:id:nato99001:20200112153047j:plain

 

SSDは1TBの容量があるとは思えない程かなり薄いです

今回選んだSalcarのケースはドライバーなどの工具が一切必要ないのが特徴です

 

ケースの挿入口を開けます

f:id:nato99001:20200112153546j:plain

 

SSDをケースに挿入し、奥まで差込ます

f:id:nato99001:20200112154001j:plain

 

3.iMacに接続する

付属のケーブルでiMacにUSB接続します

「セットしたディスクは、このコンピューターで読み取れないディスクでした。」という警告が表示されるので「無視」を選択します

f:id:nato99001:20200112155040p:plain

 

アプリケーションから「ディスクユーティリティ」を起動し、消去を選びます

f:id:nato99001:20200112155809p:plain

 

・名称:好きな名前にしてください(今回は製品名SanDisk Ultra 3D SSDにしました)

・フォーマット:「APFS」を選択します(High Sierra以前のOSはフォーマットを「Mac OS拡張(ジャーナリング)を選びます)

・方式:「GUIDパーティションマップ」を選択します

消去を選択します

f:id:nato99001:20200112155905p:plain


 消去が終わると完了を選択します

f:id:nato99001:20200112160853p:plain

 

 4.OSをダウンロードする

iMacApp Storeから「macos」と検索して最新のmacOSのデータをダウンロードします

 

起動したら続けるを選択します

f:id:nato99001:20200112161338p:plain

 

同意するを選択します

f:id:nato99001:20200112161441p:plain

 

全てのディスクを表示を選択します

f:id:nato99001:20200112161531p:plain

 

先ほど初期化したSSDを選択してインストールを選択します

f:id:nato99001:20200112161613p:plain

 

インストールが開始されます

インストールが完了すると初期設定を行います

f:id:nato99001:20200112162137p:plain

 

 

 内臓HDDをSSDに交換をしたいけどハードルが高いとお考えの方は¥13,000程で古いiMacでもストレスなく使える様になりますので是非お試しください

 

今回購入したSSDは左から2番目です

一番右はタイムマシン用の2TBのハードディスクです(SSDに比べるとかなり大きいですね)

f:id:nato99001:20200112154915j:plain



 

 

 

 

 

 

 

 

【Swift】CSVファイルをiOSアプリのデータとして取り込む

iOSアプリの中で大量のデータを検索して表示させるには、CSVファイルをXcodeに取り込んで配列にしてしまうのが簡単です。

  • CSVファイル:表形式のデータの一種でEXCELで作れる
  • 配列:データを連続して入れる形式でエクセルの行みたいなイメージ
  • XcodeAppleが用意したプログラム開発ツール(無料)

 使い方としてはクイズの問題と回答、年号一覧等が考えられます。

 

では実際にAppsにアップされている自作アプリを元に以下の順で解説していきます。

 

  1. CSVファイルをXcodeに取り込む
  2. SwiftでCSVファイルを二次元配列に書き込む
  3. 二次元配列からデータを取り出す
  • 二次元配列:縦横の連続したデータが入る形式でエクセルの表みたいなイメージ

 1.CSVXcodeに取り込む

エクセルから保存形式をCSVにしてファイルを作成します

今回のCSVはこんな感じです

f:id:nato99001:20200103113023p:plain

CSVデータサンプル

列としては「年号」「年号のふりがな」「和暦」「西暦」「時代」「改元理由」「主な出来事」の並びになっています

 

作成したCSVファイルをXCODEに取り込みます

Xcodeのバージョンは11.3です

f:id:nato99001:20200103153509p:plain

CSVファイルをXCODEのプロジェクトの中にドラック&ドロップします

f:id:nato99001:20200103153318p:plain

「Finishi」をクリックします

f:id:nato99001:20200103153127p:plain

プロジェクトの中に「gengo.csv」が追加されました

拡張子「csv」は自動的に付加されます

  • プロジェクト:ソースコードや画像、ファイルを取りまとめた集合体
  • 拡張子:ファイルの種類を表したもの

2.SwiftでCSVファイルを二次元配列に書き込む 

import UIKit

var gengoStr: Array<Array<String>> = // 元号csv->配列

class ViewController: UIViewController {

 

    override func viewDidLoad() {

        super.viewDidLoad()

      

        // 元号CSV→二次元配列

        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()

の後に以下のコードを貼り付けます

        // 元号CSV→二次元配列

        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()

    }

西暦:テキストフィールド

和暦かな 〜 出来事:ラベル 

検索:ボタン

f:id:nato99001:20200103194529p:plain

テキストフィールドとラベルをアウトレット接続します

画面の項目を右クリックしながらソースコードまで引っ張ります

西暦:seireki

和暦かな:warekikana

和暦名:warekimei

和暦:wareki

時代:jidai

改元理由:riyu

出来事: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行目の年号になります

 

シュミレーターでテストすると

f:id:nato99001:20200103200840p:plain

西暦を入力して検索ボタンをタップすると一致するデータが表示されます