SwiftUI에서 git-blame-pr.pl을 Mac 앱으로 만들었습니다.

이 문서는 ZOZO 테크놀로지스 #4 AdventCalendar2019 문서입니다.
어제는 @ 빨리 _ 씨 씨의 「FastAPI의 부하 실험 환경을 만들어 보자」 이었습니다.

그런데 어떤 코드가 어떤 배경이나 의도로 변경되었는지 알고 싶은 것은 자주 있는 것이라고 생각합니다. 이 경우 의 t-bame pr. pl 을 사용하면 코드가 어떤 당김 요청에서 변경되었는지 쉽게 알 수 있습니다.

이것은 CLI에서 그대로 사용하는 것만으로도 충분히 편리합니다.
단지 사용 빈도가 높기도 하고, 유스 케이스에 따른 GUI를 원했습니다.
그래서 git-blame-pr.pl이 출력한 결과의 행을 클릭하는 것만으로 해당 웹 페이지로 전환할 수 있는 Mac 앱을 만들어 보았습니다.

완성된 것은 아래의 리포지토리에서 공개하고 있습니다.
htps : // 기주 b. 코 m / 마오 야마 / 기 tB ぁ 메 PR


GitHub 출시에서 최신 GitBlamePR.app.zip을 다운로드하고 압축을 풀기 만하면됩니다. 꼭 사용해보십시오.
※macOS Catalina가 필요합니다.

구현 내용 소개



UI는 AppKit이 아닌 SwiftUI에서 구현됩니다.
아래 코드는 UI에서 모두입니다. SwiftUI를 사용하고 있기 때문에 스토리 보드 나 xib 파일도 없습니다.

struct GitBlamePRView: View {
    var model: GitBlamePRViewModel
    var textOnCommit: (String) -> Void

    @State private(set) var fullPath: String = ""

    var body: some View {
        VStack(alignment: .leading, spacing: 0) {
            TextField(
                "Enter full path",
                text: $fullPath,
                onEditingChanged: {_ in },
                onCommit: {
                    self.textOnCommit(self.fullPath)
                }
            ).lineLimit(1)
                .textFieldStyle(RoundedBorderTextFieldStyle())
                .padding()
            Divider()
            ScrollView(.vertical, showsIndicators: true) {
                VStack(alignment: .leading) {
                    if !model.error.isEmpty {
                        Text(model.error)
                    }
                    ForEach(model.lines, id: \.id) { line in
                        HStack(alignment: .top, spacing: 12) {
                            Text(line.message)
                                .font(Font.system(.caption, design: .monospaced))
                                .foregroundColor(.accentColor)
                                .frame(width: 80, height: nil, alignment: .trailing)
                                .onTapGesture {
                                    NSWorkspace.shared.open(line.url)
                                }
                            Text(line.code)
                                .font(Font.system(.caption, design: .monospaced))
                                .frame(width: nil, height: nil, alignment: .leading)
                        }
                    }
                    HStack {
                        Spacer()
                        EmptyView()
                    }
                }.padding()
            }.background(Color(NSColor.textBackgroundColor))
        }
    }
}


"Better apps. Less code."라고 애플이 구분하고 있는 대로, 매우 적은 코드로 실현되고 있습니다.
또한 SwiftUI는 모든 Apple 플랫폼에서 사용할 수 있습니다. 그 때문에, 저와 같은 평상시는 iOS 어플리의 개발을 하고 있는 프로그래머에서도, macOS로 움직이는 어플리를 만드는 문턱이 매우 낮아졌습니다.

이 기사는 이상입니다.
내일은 @alpha_goto씨입니다. 기대하세요!

좋은 웹페이지 즐겨찾기