Skip to content

Instantly share code, notes, and snippets.

View bannzai's full-sized avatar
スターください

bannzai bannzai

スターください
View GitHub Profile
#!/usr/bin/env bash
set -euo pipefail
# Move to project root (safe)
if [ -n "${CLAUDE_PROJECT_DIR:-}" ] && [ -d "${CLAUDE_PROJECT_DIR}" ]; then
cd "${CLAUDE_PROJECT_DIR}"
fi
# Require jq
if ! command -v jq >/dev/null 2>&1; then
@bannzai
bannzai / install-gh.sh
Last active January 17, 2026 06:52
install-git.sh
#!/usr/bin/env bash
# SessionStart hook: install/update GitHub CLI (gh) on Claude Code on the Web
set -euo pipefail
LOG_PREFIX="[gh-setup]"
log(){ echo "$LOG_PREFIX $*" >&2; }
# Only run in Claude Code on the Web
if [[ "${CLAUDE_CODE_REMOTE:-}" != "true" ]]; then
log "Not a remote session, skipping."
import XCTest
import SwiftUI
final class RetryPageSnapshotUITest: XCTestCase {
override class var runsForEachTargetApplicationUIConfiguration: Bool {
false
}
override func setUpWithError() throws {
continueAfterFailure = false
}
struct SnapshotUITest<T: PreviewProvider>: View {
var navigationBarIsHidden = false
var body: some View {
VStack(alignment: .leading, spacing: 16) {
Text(verbatim: "\(T.self)")
.font(.title3)
VStack(alignment: .leading) {
ForEach(T._allPreviews.indices, id: \.self) { index in
let preview = T._allPreviews[index]
@bannzai
bannzai / ObservableLifecycle.swift
Created March 9, 2025 04:41
Observableの効果範囲を検証するViewファイル
//
// ContentView.swift
// StateObservable
//
// Created by bannzai on 2025/03/09.
//
import SwiftUI
@Observable
@bannzai
bannzai / Tick.swift
Created August 15, 2024 17:36
Tick.swift
import Combine
import SwiftUI
class _Tick: ObservableObject {
@Published var now: Date = .now
let timer: Publishers.Autoconnect<Timer.TimerPublisher>
init(every: TimeInterval = 1) {
timer = Timer.publish(every: every, on: .main, in: .common)
.autoconnect()
@bannzai
bannzai / Document.swift
Created August 1, 2024 06:03
Document.swift
import Foundation
import FirebaseFirestore
import FirebaseFirestoreSwift
protocol SetIdentifiable: Identifiable {
mutating func set(id: ID)
}
typealias AnyEntity = Codable & Sendable & Hashable & Identifiable & SetIdentifiable
// onCall等でEntityを返す際にDocumentIDで以下のエラーになる。そのためonCallでのレスポンスはEntityを使用して、Firestoreからのデータ取得はDocument<Entity>を使用する
@bannzai
bannzai / add_sendable.sh
Last active September 3, 2024 14:12
struct, enumに無心でSendableをつけるsed。Viewは除外
#!/bin/bash
TARGET_DIR=$1
echo "やるお"
for file in $(find "$TARGET_DIR" -name "*.swift"); do
# struct User: * { の場合。ただし、View適応は除く
sed -i '' -E '/struct [A-Za-z0-9_]+: [^{]*View[^{]*\{/!s/(struct [A-Za-z0-9_]+: [^{]*)\{/\1, Sendable {/g' "$file"
sed -i '' -E '/enum [A-Za-z0-9_]+: [^{]*View[^{]*\{/!s/(enum [A-Za-z0-9_]+: [^{]*)\{/\1, Sendable {/g' "$file"
import SwiftUI
struct AsyncAction<Content: View>: View {
@State var isLoading = false
@State var task: @Sendable @MainActor () async -> Void
@ViewBuilder let content: (Bool, @escaping () -> Void) -> Content
var body: some View {
content(isLoading, {
if isLoading {
[
{
"word": "Asshole",
"kana": "アスホール",
"meaning": "いやな奴(Ass=お尻、Hole=穴)",
"notice": "「うざい野郎」「ろくでなし」"
},
{
"word": "あばずれ",
"kana": "あばずれ",