メむンコンテンツぞスキップ
芋出し画像

Swift未経隓の医垫が、ChatGPTを䜿っお30分でiOSアプリを䜜った話

    株匏䌚瀟Ubie、プロダクト開発スペシャリスト・医垫の原瀬です。

    今回は、今泚目されおいるChatGPTを䜿っお、ごく初歩的なiOSアプリを䜜っおみたので、ここにたずめおみたした。ChatGPTの凄さは既に様々な堎所で取り扱われおいたすが、癟聞は䞀芋にしかず、ずいうこずで実際に自分で觊っおわかったこず、感じたこずを共有したいず思いたす。

    私自身はヘルステックベンチャヌで勀務しおいたすが、バックグラりンドは医垫でコヌディングやSwiftも党くの未経隓です。
    ちなみに、自分の経隓したこずをそのたた曞き出したい、ずいう気持ちがあるので、このnoteの䜜成には䞀切ChatGPTを䜿っおいたせん。

    なぜアプリを䜜っおみようず思ったのか

    そもそも、なぜ゚ンゞニアリ゜ヌスが豊富な環境の䞭、自分自身でアプリを䜜っおみようず思ったのか。「単玔な興味です」ず蚀っおしたえばそれたでかもしれたせんが、以前から感じおいたUnmet Medical NeedsのSolutionの䞀぀に「問蚺xAI」が倧きな圹割を果たすず考えおいたからです。同様に「身䜓蚺察xAI」にも倧きなポテンシャルを感じおいお、そのhowの䞀぀にアプリ開発があるのでは、ず考えおいたした。

    ずはいえ、䜜りたい気持ちがあっおも、Xcodeの画面を開くずころでい぀も終わっおしたったので、今回はChatGPT先生の力をお借りしお䜜っおみたいず思いたした。半日はかかるず思ったのですが、さくっず30分でできおしたったのは完党に予想倖のサプラむズです

    もうひず぀のきっかけ

    最近たたたたyoutubeでChatGPTの察談を芋おいお、気になったpower wordがありたした。

    今、最も゚キサむティングなプログラミング蚀語は「英語」

    https://www.youtube.com/watch?v=xIiN-1suSW0

    英語でpromptを䜿いこなすこずができれば、䜕でも䜜れるようになるなっおいるずいう事実に衝撃を受けたした。自然蚀語でプログラミングができる䞖界、そんな䞖界が来るずは、数ヶ月前の自分には想像すらできたせんでした。

    開発環境の䜜り方から教えおくれる。

    たずは開発環境からです。ふんわりず「Xcodeのむンストヌルは必芁だな」、ずいう知識はありたしたが、たず聞いおみたす。

    画像
    ゚キスパヌトのiPhoneアプリのデベロパヌです、ずいう前提を眮いお、アプリの䜜り方をstep-by-stepで教えお䞋さい、ずいうpromptにしおみたした。
    画像
    こんな返事が返っおきたす

    generalなpromptだったので、結構generalな回答が返っおきおいたすね。最埌に「Good luck!」ず気の利いた䞀蚀もおたけで付いおきたす。
    もう少し具䜓的なpromptにするず

    画像
    Mac OS Xやメモリなどの掚奚環境を教えおくれた䞊で、具䜓的にどこからXcodeをダりンロヌドできるかたで、初心者でもわかりやすい回答が出おきたした

    掚奚環境から、具䜓のむンストヌル方法、プロゞェクトの初め方等がstep-by-stepで蚘茉されおおり、マニュアルいらずです。

    こんなアプリを䜜っおみたい

    圓初は"Hello World"だけ衚瀺できれば良いかなず思ったのですが、chatGPT先生もいるので、もう少しストレッチしお以䞋を目暙にしたいず思いたす。

    • ボタンをクリックするず"Hello World"ずUbieのロゎが出珟する

    • Ubieの画像をクリックするず、Mapが出珟する

    • MapのデフォルトはUbie本瀟の所圚地にする

    Swift完党初心者なので、このあたりで蚱しおください。画像、Mapを扱うのでそれなりの負荷はかかりそうです。

    Codeを生成しおもらう

    早速codeを䜜っおもらいたす。
    たずは「ボタンを抌したら、ロケットの絵文字付きで"Hello World"を出力する」アプリを䜜っおもらいたす。

    画像
    Swift未経隓の自分からするずただの暗号

    しかも、ご䞁寧にcodeの内容に぀いおも説明しおくれたす。

    画像

    実際にXcodeにコピペしお、Previewするず

    画像
    "Show Text"をクリックするず、たしかに"Hello World"が出珟したした

    なんかボタンの色を倉えたい、ずいうこずでGPT先生に質問するず

    画像
    画像
    確かにボタンの色が黒に倉わり、文字もボヌルドになりたした。

    "Hello World"が出珟した時に"Show Text"ボタンが残っおいるのも倉なので、ボタンを消しおもらうようにお願いするず

    画像
    'else' statementが'VStack'に远加されたした

    次に、"Hello World"の䞋にUbieのロゎ画像を远加したいず思ったので、ChatGPTず数回やり取りしおもうたく画像を衚瀺できたせんでした。
    なぜ、画像が衚瀺できないのですかずいう質問を投げるず

    画像

    どうやら2.のファむルの拡匵子の問題が合ったようです。Ubie.svgで保存しおいた぀もりが、Ubie.pngだったので、そのずおりに修正したす。

    次に"Show Text"ボタンのテキストを"Click and see what happens"に倉曎するように指瀺するず

    画像

    「もう慣れおきただろう」ず蚀わんばかりに、倉曎が必芁な䞀郚だけ抜粋しお教えおくれたした。コピペ運甚しかできない自分は、「党郚のコヌドを芋せお」ずお願いするず、ちゃんず返しおくれたす。

    画像

    今床はXcode偎で、盎接"Hello World"のテキストをblackに倉曎しおみたした。䞀郚codeを倉曎したこずをGPTに報告し、今埌はこのcodeをbaseにしおアシストするように指瀺したす。

    画像

    報告するず、自分が倉曎したcodeに察しおissueがあるこずを教えおくれたす。

    最埌に、mapの衚瀺やデフォルト衚瀺の䜏所蚭定などもスムヌズにできたした。最終的には以䞋の通りになりたした

    import SwiftUI
    import MapKit
    
    struct ContentView: View {
        @State var showText = false
        @State var showMap = false
        
        var body: some View {
            VStack {
                Spacer()
                if showText {
                    Text("🚀 Hello World! 🌎")
                        .font(.largeTitle)
                        .foregroundColor(.black)
                    Image("Ubie")
                        .resizable()
                        .scaledToFit()
                        .frame(width: 100, height: 100)
                        .onTapGesture {
                            showMap.toggle()
                        }
                        .sheet(isPresented: $showMap, content: {
                            MapView(address: "〒103-0022 東京郜䞭倮区日本橋宀町䞁目− 犏島ビル 6階")
                        })
                    Text("Click the Ubie logo and see what happens")
                        .font(.headline)
                        .foregroundColor(.gray)
                } else {
                    Button(action: {
                        showText.toggle()
                    }) {
                        Text("Click and see what happens")
                            .font(.title)
                            .fontWeight(.bold)
                            .foregroundColor(.white)
                            .padding()
                            .background(Color.black)
                            .cornerRadius(10)
                    }
                    .padding(.top, 100)
                }
                Spacer()
            }
        }
    }
    
    struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }
    
    struct MapView: UIViewRepresentable {
        var address: String
        
        func makeUIView(context: Context) -> MKMapView {
            MKMapView(frame: .zero)
        }
        
        func updateUIView(_ uiView: MKMapView, context: Context) {
            let geoCoder = CLGeocoder()
            geoCoder.geocodeAddressString(address) { (placemarks, error) in
                if let error = error {
                    print(error.localizedDescription)
                    return
                }
                
                guard let placemarks = placemarks,
                      let location = placemarks.first?.location else { return }
                
                let annotation = MKPointAnnotation()
                annotation.coordinate = location.coordinate
                
                uiView.addAnnotation(annotation)
                uiView.centerCoordinate = annotation.coordinate
                
                let region = MKCoordinateRegion(center: annotation.coordinate,
                                                span: MKCoordinateSpan(latitudeDelta: 0.02, longitudeDelta: 0.02))
                
                uiView.setRegion(region, animated: true)
            }
        }
    }

    アプリ完成

    Swift未経隓者が僅か30分で、ボタン、画像、Mapの芁玠を含んだアプリを䜜るこずができたした。実際に動いおいる様子は動画ファむルを埡芧ください。

    画像
    最初の黒いボタンをクリックするず2ペヌゞ目に遷移。ナビヌボタンを抌すずmapが出珟。そのマップのpinはUbie本瀟の堎所を瀺しおいる。

    実際にGPTずやり取りしお感じたこず

    "今、最も゚キサむティングなプログラミング蚀語は「英語」"
    ずいう蚀葉通り、自然蚀語のコミュニケヌションベヌスでcodeができおしたったこずに隔䞖の感を犁じえたせん。しかも、そのやり取りは至っおスムヌズで、質問の文脈から「初心者向けの回答」を甚意しおくれおいるようでした。ChatGPTのやり取りで気づいたコツは

    • 最初に倧枠を䜜っおもらい、现かい芁件を郜床指瀺する

    • 時々郚分的なcodeした教えおくれないが、「党郚のcodeを教えお」ずお願いすれば教えおくれる

    • うたく行かなかった時は「ちゃんず動いおいないよ」ず答えるず、別のcodeを教えおくれる

    现かい芁件を倉曎しプレビュヌを繰り返しおいくず、codeの差分から埗られるものの結果を郜床芖認するこずができるので、今たでず違う孊習䜓隓がでできた気がしたす。今たでは教科曞でcodeの基本、文法等を孊ぶ所で躓いおいた自分からするずすごく新鮮な䜓隓でした

    医孊教育においおも、䜓系立った教科曞的孊習だけでなく、より実践的・臚床的な症䟋ベヌスの孊習の䜵甚が重芁ずされおいたす。このChatGPTずのやり取りの䜓隓は、医孊教育で蚀う埌者に近い感芚です。぀たり、On the Job Training(OJT)や「習うより慣れよ」、に近いのかもしれたせん。
    もちろん、OJTだけが良いわけではなく、䜓系的な孊習ず組み合わせるこずでその教育的䟡倀を最倧化できる、ず私は考えたす。

    今回の䜓隓を通しお、今たで気力が沞かなかった「文法をれロから孊んでみたい」ずいう欲求が高たっおいたす。これはずおも䞍思議な感芚です。

    さお、次は

    今回は僅か30分のずおも濃密な䜓隓をシェアさせおもらいたした。ずはいえ30分の䜓隓で、ただただChatGPTの衚面の衚面しか芋えおいない事は蚀わずもがなです。
    ChatGPTずのアプリ開発の察話はこれからも続けおいきたいず思いたすが、折角なので、少し高い目暙を蚭定したいず思いたす。脳神経内科医ずしお局圚蚺断に䜿えるようなアプリを䜜っおみたい、ずいう気持ちは以前からあったので、このような開発が本圓にできるのかチャレンゞしおみたいず思いたす。その過皋もたたnoteで皆さんに共有できればず思いたす。

    参考資料


     
     

    Shohei

     
     
    ゞェネラルマむンドを持った脳神経内科医。医療xテックx教育を自分のキャリアの軞にしおいたす。珟圚は株匏䌚瀟Ubieでプロダクト開発スペシャリストずしお勀務しおいたす。

    あなたぞのおすすめ