この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:guest
更新日時:2026-06-11 07:12:00

タイトル: print でデバッグ出力
SEOタイトル: Swift print 関数 完全ガイド(debugPrint / dump / 区切り文字 / 改行制御 / 本番リリース対策)

この記事の要点
  • print() は Swift 標準のデバッグ出力関数。Xcode のコンソールに値を出力できる
  • 可変長引数: print(a, b, c) で複数の値をスペース区切りで一括出力
  • separator / terminator 引数で区切り文字と末尾文字をカスタマイズ可能
  • debugPrint() はデバッグ表現(型情報付き)、dump() はオブジェクトの内部構造を再帰表示
  • 本番ビルドでは #if DEBUG でログを切り分け — print 残しはパフォーマンスを下げる

print 関数とは

print() は Swift で最もよく使われるデバッグ出力関数です。引数に渡した値を Xcode のデバッグエリア(コンソール)に表示します。標準ライブラリに組み込まれており、追加 import なしで使えます。

var str = "Hello, playground"
print(str)
// 出力: Hello, playground

let count = 42
print("件数:", count)
// 出力: 件数: 42

シグネチャ

public func print(
    _ items: Any...,
    separator: String = " ",
    terminator: String = "\n"
)
引数役割既定値
items出力する値(可変長)必須
separatoritems の区切り文字半角スペース
terminator出力の末尾文字改行 \n

複数の値を一括出力

let name = "Alice"
let age = 30
let city = "Tokyo"

print(name, age, city)
// 出力: Alice 30 Tokyo

print(name, age, city, separator: " / ")
// 出力: Alice / 30 / Tokyo

print(name, age, city, separator: "\n")
// 出力:
// Alice
// 30
// Tokyo

改行を抑制する

terminator: "" を指定すると改行されずに連続して出力できます。プログレス表示で便利。

for i in 1...5 {
    print(i, terminator: " ")
}
print()  // 最後に改行
// 出力: 1 2 3 4 5

文字列補間でフォーマット

let price = 1280
let tax = 0.10

print("税込: \(Int(Double(price) * (1 + tax)))円")
// 出力: 税込: 1408円

// 小数点桁数の制御は String(format:) を使う
let pi = Double.pi
print(String(format: "π = %.3f", pi))
// 出力: π = 3.142

print vs debugPrint vs dump

関数出力用途
print()人間向け(簡潔)通常のデバッグ表示
debugPrint()プログラマ向け(型情報あり)String を "..." で囲んで出すなど
dump()オブジェクトの内部構造を再帰表示構造体・配列の中身を全部見たい時
struct User {
    let name: String
    let age: Int
    let tags: [String]
}

let u = User(name: "Alice", age: 30, tags: ["swift", "ios"])

print(u)
// 出力: User(name: "Alice", age: 30, tags: ["swift", "ios"])

debugPrint(u)
// 出力: __lldb_expr.User(name: "Alice", age: 30, tags: ["swift", "ios"])

dump(u)
// 出力:
// ▿ User
//   - name: "Alice"
//   - age: 30
//   ▿ tags: 2 elements
//     - "swift"
//     - "ios"

CustomStringConvertible で表示をカスタム

自作の型に CustomStringConvertible を実装すると、print で独自の表現が出せます。

struct Point: CustomStringConvertible {
    let x: Int
    let y: Int

    var description: String { "(\(x), \(y))" }
}

let p = Point(x: 10, y: 20)
print(p)
// 出力: (10, 20)

本番リリース時の対策

print 文を残したまま App Store にリリースすると、無用なコンソール書き込みでパフォーマンスが落ちるうえ、機密情報が iOS のシステムログに残る恐れがあります。

// 方法1: コンパイル条件で切り分け
func debugLog(_ items: Any...) {
    #if DEBUG
    print(items.map { "\($0)" }.joined(separator: " "))
    #endif
}

debugLog("ログイン成功", userID)

// 方法2: os_log / Logger (iOS 14+)
import OSLog

let logger = Logger(subsystem: "com.example.app", category: "network")
logger.debug("API レスポンス: \(response, privacy: .private)")

Logger は機密扱いのマーキングやカテゴリ別フィルタに対応し、Apple 公式が推奨する近年のロガーです。本番では Logger、開発時の手早い確認は print、という使い分けが現代的。

FAQ

Q: print が表示されない
A: Xcode 下部のデバッグエリアが閉じている。Shift + Command + Y で表示。デバイス実機の場合は Console.app でフィルタする。

Q: 配列の中身を綺麗に出したい
A: dump(array) で改行付き、または array.map { "\($0)" }.joined(separator: "\n") で 1 行ずつ。

Q: print の出力先を変えたい
A: 第二引数に TextOutputStream 準拠オブジェクトを渡せばファイル出力なども可能。print(text, to: &myStream)

Q: NSLog との違いは?
A: NSLog はシステムログにも書き込まれタイムスタンプ付き。print は標準出力だけ。近年は Logger / os_log 推奨で、NSLog はレガシー扱い