ãã®èšäºã¯ Safie Engineers' Blog! Advent Calendar ã®7æ¥ç®ã®èšäºã§ãã æ
å ±ã·ã¹ãã ã°ã«ãŒãã®æŸå°Ÿã§ãã 以åãåœããã°ã«ãŠãæ
ã·ã¹ããŒã ãã¢ãžã£ã€ã«åã®ä»äºã®è©±ãžå€é©ããéã®èšäºãæžãããŠããã ããŸããã engineers.safie.link ä»åã¯ãã®ç¶ç·šãšããŠãã¢ãžã£ã€ã«ãªããŒã äœããããã«é²ããäžã§çãŸããã ããããããªã¹ãããçšããç¶ç¶çæ¹åïŒã«ã€ãŒã³ïŒã®åãçµã¿ ã«ã€ããŠã話ãããŸãã ãé ããè² åµããžã®æ°ä»ã å¿ççããŒãã«ãäžããããããããªã¹ãã ç»é²ã³ã¹ããäžãããä»çµã¿ã ããããããããçãŸããå
·äœçãªã«ã€ãŒã³ 1. å
¥ç€ŸãããŒã«ãããããã»ã¹ã®æšæºå 2. é害察å¿ã®è±å±äººåïŒã¯ãã¹ãã¡ã³ã¯ã·ã§ãã«ãªããŒã ãžïŒ ãªãŒããŒä»»ãã«ããªããæç¶å¯èœãªéçšã«åã㊠ãé ããè² åµããžã®æ°ä»ã ã¹ããªã³ããåãäžã§ãæ¥ã
ã®æ¥åã«åãããã¡ãªãå°ããªéåæããæŸçœ®ããããšã§ãåé¡ãçºçããããšã«æ°ã¥ããŸããã ãããã¯åŸã§å¯Ÿå¿ããã»ãããããããšäŒè©±ã«ã¯åºããã®ã®ãã¿ã¹ã¯åãããã«æµããŠããŸããå¿ããé ã«åããã©ãã«ãçºçããŠææ»ãã«ãªãããšããããŸããã ããã¯ã¢ãžã£ã€ã«ã§èšããšããã® ãéææ§ã ãæ¬ ããŠããç¶æ
ã§ãããèŠããªãæè¡çè² åµãããŒã ã«èç©ãããŠããç¶æ
ã§ããã ããã§ç§ãã¡ã¯ããå®ç§ãªè§£æ±ºçããæåããæ±ããã®ã§ã¯ãªãããŸã㯠ãå°ããªéåæãããŒã ã§æ€ç¥ããã«ã€ãŒã³ããä»çµã¿ã ãäœãããšã«ããŸãããæ¹éã¯ä»¥äžã®2ç¹ã§ãã ã¹ããã¯ããïŒéæåïŒ: ããããªããããã¡ãã£ãšæ°ã«ãªãããå¯èŠåããå Žæãäœã æ¯ãè¿ãïŒæ€æ»ãšé©å¿ïŒ: 宿çã«èŠçŽããåçºé²æ¢ã®ä»çµã¿ã«å€ãã å¿ççããŒãã«ãäžããããããããªã¹ãã ãã®ä»çµã¿ãåããããNotionã«ããŒã¿ããŒã¹ãäœæããŸããã ããã§éèŠãªã®ã¯ã ãã¿ã¹ã¯ããšããŠç»é²ããã®ã§ã¯ãªãããããããããšããŠç»é²ããããš ã§ãã ãã¿ã¹ã¯ç»é²ããšèšããããšããå®äºæ¡ä»¶ã¯ïŒããæéã¯ïŒããšèããŠããŸããç»é²ã®å¿ççããŒãã«ãäžãã£ãŠããŸããŸãã ã¢ãžã£ã€ã«ãªããŒã ã«ã¯å¿ççå®å
šæ§ãäžå¯æ¬ ã§ããããã ããããããªã¹ãã ãšããååã«ããããšã§ãæªå®æã®ç¶æ
ã§ãæ°è»œã«æŸã蟌ããããã«ããŸããã ç»é²ã³ã¹ããäžãããä»çµã¿ã éçšãã培åºçã«ããŒãã«ãäžãã工倫ãããŸããã æåç»é²: æäŒãéè«ã§åºããã®ã¯ãã®å Žã§è¿œå Slack飿ºã«ããèªåç»é²: Slackäžã§èª²é¡ãããçºèšããã£ãéãç¹å®ã®ã¹ã¿ã³ããæŒããšèªåçã«Notionã®ããããããªã¹ããã«èµ·ç¥šããã ããã«ããããããŒæ
å ±ãšããŠæµããŠããŸããã¡ãªSlackäžã®äŒè©±ãã匷å¶çã«ã¹ããã¯æ
å ±ãšããŠèç©ããä»çµã¿ãæŽããŸããã ãªã¹ãã«å
¥ã£ãé
ç®ã¯ã2é±éã«äžåºŠã®ãµã€ã¯ã«ã§æ£åžããè¡ããŸããããã§åã㊠ãèŠå®ãïŒä»ã¯äœãããªãïŒã ã ã鲿äžïŒã¿ã¹ã¯åããïŒã ãã倿ããŸãã ããŒã ã®ãªãœãŒã¹ã«ã¯éãããããããããããããã¯å
šãŠã®é
ç®ãæ¹åããã®ã§ã¯ãªããçŸæç¹ã§ ã¯çŸç¶ç¶æã§ãåé¡ãªããšããŒã ã§å€æã§ãããã®ã¯äžæŠããçŸåšã®å¯Ÿå¿ã§ç¶ç¶ããã ãšããããšããããŸããã ããããããããçãŸããå
·äœçãªã«ã€ãŒã³ ãã®ãµã€ã¯ã«ãåãããšã§ãå®éã«ã©ã®ãããªæ¹åãè¡ãããããã玹ä»ããŸãã 1. å
¥ç€ŸãããŒã«ãããããã»ã¹ã®æšæºå æ°å
¥ç€Ÿå¡åãã®ITãªãªãšã³ããŒã·ã§ã³ã«ã€ããŠãæ¯æã®æ¯ãè¿ããéããŠããã»ã¹ãæ¹åããŸããã äœæ¥ãããŒã®çµ±äž: éçšåœ¢æ
ããšã«ãã©ãã©ã ã£ãæé ãçµ±äžããè€éæ§ãæé€ïŒãªãã¬ãŒã·ã§ã³ãã¹ã®åæžïŒ ãã£ãŒãããã¯ã®åæ : PCéµéæãä»£æ¿æ©è²žäžæã®ããã€ãªããããããªã¹ãããæŸãäžããäºå察çãããŒã远å äžåºŠæ±ºããã«ãŒã«ãå確èªããçºçããäºè±¡ã«åãããŠãããŒèªäœãã¢ããããŒããç¶ããŠããŸãã 2. é害察å¿ã®è±å±äººåïŒã¯ãã¹ãã¡ã³ã¯ã·ã§ãã«ãªããŒã ãžïŒ ãããã¯ãŒã¯é害ã¯ãã©ãããŠãç¹å®ã®ãšãã¹ããŒãã«äŸåããã¡ãªé åã§ããããããã¢ãžã£ã€ã«ãªããŒã ã¯ã誰ããããªããšåããªããç¶æ
ãè¯ããšããŸããã ããã§ãããããããªã¹ããã«äžãã£ãé害察å¿ãæ¯ãè¿ãã ãåŸæ¥å¡ã®æ¥åãæ¢ããæéãæ¥µåçãããïŒMTTRã®ççž®ïŒ ãããšã«ãã©ãŒã«ã¹ãçµã£ãåå察å¿ããã¥ã¢ã«ãäœæããŸããã ããã«ããã ãããã¯ãŒã¯å°ä»»æ
åœè
以å€ã§ãäžæ¬¡åãåããå¯èœã«ãªããããŒã å
šäœã§ã®å¯Ÿå¿åãåäžããŸããã ãªãŒããŒä»»ãã«ããªããæç¶å¯èœãªéçšã«åã㊠ããããããªã¹ããã®éçšã¯ãçŸåšã¯ã°ã«ãŒããªãŒããŒã§ããç§ããã¡ã·ãªããŒãããããšãå€ãã§ãããé·æçã«ã¯ ããŒã ã¡ã³ããŒã®èª°ãã課é¡ãçºèŠããèªåŸçã«æ¹åãµã€ã¯ã«ãåããïŒèªå·±çµç¹åïŒãç¶æ
ãç®æããŠãããããšèããŠããŸãã ä»åŸã¯éçšã«ãŒã«ã®ããã¥ã¡ã³ãåãé²ãã誰ã§ããã®ããã»ã¹ãéçšã§ããããã«ããŠãããŸãããŸããæºãŸã£ãŠãã ãèŠå®ããã¹ããŒã¿ã¹ã®æ£åžãã宿çãªã€ãã³ããšããŠçµã¿èŸŒã¿ãããããããªã¹ãããå¥å
šã«ä¿ã€ä»çµã¿ ãäœã£ãŠããäºå®ã§ãã æ¥å¹Žä»¥éããããããå°ããªãã«ã€ãŒã³ããç¹°ãè¿ããå€åã«åŒ·ãæ
ã·ã¹ããŒã ãäœã£ãŠãããããšæããŸãã
ãã®èšäºã¯ ã»ãŒãã£ãŒæ ªåŒäŒç€Ÿ Advent Calendar 2025 ã®12æ6æ¥ã®èšäºã§ãã ããã«ã¡ã¯ïŒ ã»ãŒãã£ãŒæ ªåŒäŒç€Ÿã®Androidãšã³ãžãã¢ã®ãžã§ããŒã ( @yujiro45 )ã§ãð æšå¹Žãç§ãæžããã Androidã§SceneViewã䜿ã£ãŠã3D/ARã衚瀺ãã ããšããèšäºã§ãã¢ããªã«3D/ARæ©èœãç°¡åã«å®è£
ã§ããã©ã€ãã©ãªã玹ä»ããŸããã ãããçŸåšãSceneViewã¯ã¡ã³ããã³ã¹ãããŠããããã³ã³ããªãã¥ãŒã¿ãŒããã® GitHubã§ã®ã³ã¡ã³ã ã«ããã°æ°ãããªãªãŒã¹ã®äºå®ã¯ãããŸããã åºå
žïŒGithub, https://github.com/SceneView/sceneview-android/issues/623#issuecomment-3097955731 (2025/11/12ã¢ã¯ã»ã¹) æ¬èšäºã§ã¯ã Android XR ã®æ°ããã©ã€ãã©ãªã SceneCore ãã䜿ã£ãŠãã¢ããªå
ã«3D/ARã衚瀺ããæ¹æ³ã説æããŸãã Android XRãšã¯ Android XRã®Emulatoräœææ¹æ³ SceneView vs SceneCore 3Dã¢ãã«ã衚瀺ãã SceneView SceneCore ExoPlayerã®åç»ã衚瀺ãã SceneView SceneCore ãŸãšã Android XRãšã¯ Android XR ã¯ãAR/VRåãã®ãããã»ãããã¹ããŒãã°ã©ã¹çšã«äœããããAIæèŒã®Android OSã§ããã¢ããªã3D空éã«è¡šç€ºã»æäœã§ããéçºã§ã¯Compose for XRãSceneCoreãªã©ã®ã©ã€ãã©ãªã䜿ã£ãŠå®è£
ããŸãã Android XRã®Emulatoräœææ¹æ³ Android XRã¯ãXRã察å¿ãã端æ«ã§ãã䜿ããªãã®ã§ç«¯æ«æã£ãŠããªãå Žåã¯ãXRã®Emulatorãäœæããªããšãããªãã§ãã ã»ãã·ã§ã³ã®äœæã¯ãAndroid XR ããã€ã¹ã§ã®ã¿ãµããŒããããŠããŸããäºææ§ã®ãªãããã€ã¹ã§ã»ãã·ã§ã³ãäœæããããšãããšãçµæã¯å€±æããŸãã https://developer.android.com/develop/xr/jetpack-xr-sdk/add-session Android Studioã®ããã€ã¹ãããŒãžã£ãŒã§XRã®ã«ããŽãªããããŸããããã§ãXRã®Emulatorãç°¡åã«äœæã§ããŸãã SceneView vs SceneCore 3Dã¢ãã«ã衚瀺ãã ð¡ãã®èšäºã§ã¯ãSceneCoreã®ææ°çïŒå·çæç¹ïŒã§ãã 1.0.0-alpha08 ã䜿çšããŠããŸãã SceneViewã¯ææ°çã® 2.3.0 ã䜿çšããŠããŸãã SceneViewãšSceneCoreã®éããçè§£ãããããäž¡æ¹ã®ã©ã€ãã©ãªã§ãããã€ãåãã®3Dã¢ãã«ã衚瀺ããŠã¿ãŸãããïŒÙ©( 'Ï' )Ù åºå
žïŒSketchfab, https://sketchfab.com/3d-models/android-7c30eda007684abbb78ea4b99d22fc2c ã(2025/11/12ã¢ã¯ã»ã¹) SceneView SceneviewexampleTheme { val engine = rememberEngine() val modelLoader = rememberModelLoader(engine) // 3Dã¢ãã«çšã®ããŒããäœæ val modelNode = ModelNode( // 3Dã¢ãã«ã®èªã¿èŸŒã¿ (/res/raw) modelInstance = modelLoader.createModelInstance(R.raw.android) ).apply { // 3Dã¢ãã«ã®åæèšå® scale = Scale( 1 / 40f ) position = Position( 0f ) } Scene( modifier = Modifier.fillMaxSize(), engine = engine, modelLoader = modelLoader, childNodes = rememberNodes { // ã¢ãã«ããŒãã®è¿œå add(modelNode) } ) } çµæïŒ è©³çŽ°ã¯ã以åã®èšäºã Androidã§SceneViewã䜿ã£ãŠã3D/ARã衚瀺ãã ãã§èª¬æããŠããã®ã§ããã²èªãã§ãã ãããð SceneCore Subspace { val session = LocalSession.current ?: return @Subspace val capabilities = LocalSpatialCapabilities.current var entity by remember(session) { mutableStateOf<GltfModelEntity?>( null ) } LaunchedEffect(session, capabilities.isContent3dEnabled) { // Full Spaceã¢ãŒãã«åãæ¿ã if ( ! capabilities.isContent3dEnabled) { session.scene.requestFullSpaceMode() return @LaunchedEffect } // çæã¯1åã ã if (entity == null ) { // 3Dã¢ãã«ã®èªã¿èŸŒã¿ (app/src/main/assets/models/android.glb) val model = GltfModel.create(session, Paths. get ( "models" , "android.glb" )) // 3Dã¢ãã«ãäœæãã entity = GltfModelEntity.create(session, model).apply { // Positionãèšå®ãã setPose(Pose(Vector3( 0f , 0f , - 1.5f ), Quaternion.Identity)) // Scaleãèšå®ãã setScale( 0.2f ) } } } // Lifecycle管ç DisposableEffect(session) { onDispose { entity?.setEnabled( false ) entity?.parent = null entity = null } } } çµæïŒAndroid XRã§3Dã¢ãã«ã衚瀺ã§ããŸãããïŒ SceneViewãšSceneCoreã®äž»ãªéãã¯ä»¥äžãšãªããŸãã SceneView SceneCore 3D Space Scene Subspace 3Dãªããžã§ã¯ã Node Entity 3Dã¢ãã«ã®Path /res/raw/ app/src/main/assets/models/ Lifecycleå¯Ÿå¿ rememberEngine / rememberModelLoader / rememberNodes ã䜿çšãããšãCompose ãã©ã€ããµã€ã¯ã«ãé¢åã¿ãããlifecycleã察å¿ããã®ã¯äžèŠã§ãã SceneCore ã® Entity 㯠XRåŽã§èªåç Žæ£ãããªããããComposableã®çµäºãã»ãã·ã§ã³åæ¿æã« DisposableEffect(session) å
ã§æç€ºçã«è§£æŸããªããšãããªãã§ãïŒã¡ã¢ãªãªãŒã¯é²æ¢ã®ããïŒã 3Dãªããžã§ã¯ãã®è¿œå æ¹æ³ Scene ã䜿ããšãäžã« Node ãäœæã§ããŸãã childNodes = rememberNodes { add(modelNode) } ã®ããã« Node ã远å ãããšã衚瀺ãããŸãã GltfModelEntity.create(session, model) ãåŒã¶ãšã3Dã¢ãã«çšã® Entity ãäœæããã .add() ããªããŠã衚瀺ãããŸãã 3Dã¹ããŒã¹ã¢ãŒããåãæ¿ãã äžèŠ Android XRã®Entityã䜿ãæã session.scene.requestFullSpaceMode() ã®ããã«ãFull Spaceã¢ãŒãã«åãæ¿ããªããšãããªãã§ãã ExoPlayerã®åç»ã衚瀺ãã åºå
žïŒPexels, https://www.pexels.com/ja-jp/video/13299023/ ã(2025/11/12ã¢ã¯ã»ã¹) SceneView SceneViewã§ä»¥åã®èšäºã Androidã§SceneViewã䜿ã£ãŠã3D/ARã衚瀺ãã ãã§æžããéãã§ãMaterialãäœæããªããšãããªãã§ãã class ExoPlayerVideoMaterial( engine: Engine, exoPlayer: ExoPlayer, private val materialLoader: MaterialLoader, ) { // SurfaceTextureäœæ private val surfaceTexture = SurfaceTexture( 0 ).apply { detachFromGLContext() } // SurfaceTextureâSurfaceäœæ private val surface = Surface(surfaceTexture) // Textureã®ããã«ãFilamentã®Streamäœæ private val stream = Stream.Builder() .stream(surfaceTexture) .build(engine) // Textureäœæ private val texture = VideoTexture.Builder() .stream(stream) .build(engine) // VideoTextureã䜿ã£ãMaterialInstanceäœæ val videoInstance get () = materialLoader.createVideoInstance(videoTexture = texture).apply { setExternalTexture(texture) } init { // ExoPlayerã®Surfaceèšå® exoPlayer.setVideoSurface(surface) } } SceneviewexampleTheme { // ExoPlayerã®èšå® val player = remember { ExoPlayer.Builder(context).build().apply { repeatMode = Player.REPEAT_MODE_ALL } } // ãã£ãã®äœæããExoPlayerVideoMaterial val videoMaterial = ExoPlayerVideoMaterial(engine, player, materialLoader) val videoNode = PlaneNode( engine = engine, // åç»ã¯16:9ã®ãã size = Size( 16f , 9f ), // Nodeã®MaterialInstanceèšå® materialInstance = videoMaterial.videoInstance, ) ARScene( //... childNodes = rememberNodes { // ããŒãã®è¿œå add(videoNode) }, ) } çµæïŒ SceneCore ExoPlayerã® .setVideoSurface() ã䜿ããš Surface ã«åçã§ããŸããSceneCoreã«ã¯ SurfaceEntity ãããã Surface ãæäŸãããããExoPlayerãæ¥ç¶ããŠXRã§åçã§ããŸãã Subspace { val session = LocalSession.current ?: return @Subspace val capabilities = LocalSpatialCapabilities.current val context = LocalContext.current // äœæãã SurfaceEntity ãä¿æ var surface by remember(session) { mutableStateOf<SurfaceEntity?>( null ) } // ExoPlayer ã¯ã³ã³ããŒã¶ãã«ã®ã©ã€ããµã€ã¯ã«ã«åãããŠ1ã€ã ã val player = remember { ExoPlayer.Builder(context).build().apply { repeatMode = Player.REPEAT_MODE_ALL } } // Lifecycleã®ãã DisposableEffect(session) { onDispose { player.clearVideoSurface() player.release() surface?.setEnabled( false ) surface?.parent = null surface = null } } LaunchedEffect(session, capabilities.isContent3dEnabled) { // Full Spaceã¢ãŒãã®åãæ¿ã if ( ! capabilities.isContent3dEnabled) { session.scene.requestFullSpaceMode() return @LaunchedEffect } if (surface == null ) { // SurfaceEntity val surfaceEntity = SurfaceEntity.create( session = session, pose = Pose( // Positionãèšå®ãã Vector3( 0f , 0f , - 1.5f ), ), // åç»ã¯16:9ã®ãã shape = SurfaceEntity.Shape.Quad(FloatSize2d( 16f , 9f )), ) // Scaleãèšå®ãã surfaceEntity.setScale( 0.25f ) // æåã®é»å¡ããé¿ããããã1ãã¬ãŒã ç®ãŸã§é衚瀺 surfaceEntity.setEnabled( false ) // ExoPlayerãSurfaceEntityã«æ¥ç¶ããŠåçïŒres/raw/video.mp4ïŒ val uri = RawResourceDataSource.buildRawResourceUri(R.raw.video) player.setVideoSurface(surfaceEntity.getSurface()) player.setMediaItem(MediaItem.fromUri(uri)) player.prepare() player.addListener( object : Player.Listener { override fun onRenderedFirstFrame() { screen.setEnabled( true ) } }) player.play() surface = surfaceEntity } } } çµæïŒAndroid XRã§åç»ã衚瀺ã§ããŸããïŒð åç»ã衚瀺ããããã«ã SceneView ãš SceneCore ã®äž»ãªéãã¯ä»¥äžãšãªããŸãã SceneView SceneCore ExoPlayerã®è¡šç€ºæ¹æ³ VideoNode ãã³ã¡ã³ãã¢ãŠããããŠããã®ã§ãåç»åççšã® Material ãäœæå¿
èŠããããŸãã SurfaceEntity ã䜿ããšãç°¡åã«åç»åçã§ããŸãã ãŸãšã SceneViewã¯ã¡ã³ããã³ã¹ãããŠããªãã®ã§ãSceneCoreã¯æåãªä»£æ¿ã§ããæžãæ¹ã¯ãããã䌌ãŠãããGoogleãäœã£ãŠããã©ã€ãã©ãªã§ãããã ãåè¿°ã®ãšãããAndroid XRã«å¯Ÿå¿ããããã€ã¹ã§ã®ã¿åäœããŸããäžè¬çãªã¹ããŒããã©ã³ã§ã¯å®è¡ã§ããŸãããããã²Emulatorã§è©ŠããŠéãã§ã¿ãŠãã ããïŒ ã¢ãã€ã«ããŒã ã¯éçºãã仲éãåéããŠããŸãïŒ open.talentio.com open.talentio.com
ãã®èšäºã¯Â Safie Engineers' Blog! Advent Calendar  ã®5æ¥ç®ã®èšäºã§ãã ã¯ãããŸããŠãã¯ãªãªãã£ãããžã¡ã³ããªãã£ã¹ QCDã°ã«ãŒãã®çš²å¡ã§ãã ãã®èšäºãæžãããšæã£ãçç±ã§ããã 2025幎1æã«ã»ãŒãã£ãŒã®QAããŒã ã«ãžã§ã€ã³ããŠãã°ããçµã¡ãŸããã®ã§ãããããã®QAãšã³ãžãã¢ãã»ãŒãã£ãŒã®QAããŒã ã§ã©ããªããšã«åãçµãã§ãããæ¯ãè¿ãããšæããŸããã ããŒã ã®ãã¹ã掻åãæ¹åããããã«ã©ã®ãããªæœçãå®è¡ããŠããã®ããå
±æããããšã§ãQAãšã³ãžãã¢ã®æ¹ã
ãéçºããŒã ã®æ¹ã
ã«ãšã£ãŠäœãããã®ãã³ãã«ãªãã°å¹žãã§ãã MagicPodã§ã®ãã¹ãèªåå QAãããŒã®æ¹å ã¹ã¯ã©ã ã®æ¹å MagicPodã§ã®ãã¹ãèªåå QAãæ
åœããããšã«ãªã£ãã·ã¹ãã ã¯ã¡ããã©ãã¹ãèªååãããããšãããã§ãŒãºã ã£ãããããã®ãã£ããã¢ããããè¡ããŸããã æ¡çšããŠããããŒã«ããMagicPodããšãããã®ã§ãäžèšã®ãããªç¹åŸŽããããŸãã AIã«ããã¹ã¯ãªããäœææ¯æŽïŒèªå修埩 ã€ã³ã¹ããŒã«äžèŠãªæè»œããšãã¯ã©ãŠãã®ç«¯æ«ããã©ãŠã¶ã䜿ã£ãŠããã«ãã¹ãäœæå¯èœ Webã¢ããªã»ã¢ãã€ã«ã¢ããªã«å¯Ÿå¿ MagicPodã¯æè»œããšçŽæçãªæäœãã§ãããšããããšã§ããã¡ãã¯äœãåŠç¿ã³ã¹ãã§å®è£
ã§ããããã«ãªããŸãããMagicPodã«è©³ããã¡ã³ãããªã³ããŒãã£ã³ã°ãããŠãããã®ã倧ããã£ãã§ãã å
±æã¹ãããã倿°ã®æŽ»çšãäžæãªããŒã¿åå²ãªã©ãã¯ãã«ã«ã«äœ¿ãããªãããšãããšãŸãæè¡ã¯å¿
èŠã«ãªã£ãŠããŸãã äžéããã¹ãã®èªååãå®äºã§ããŠãæ¥ã
ã®éçšã«ã®ãããšãããšãããå®çŸã§ããã®ã¯ããŒã ã¡ã³ãã®äœæ¥æéãæ¥ã
åºå®ã§æŒãããã®ãè¯ãã£ããšæããŸãïŒåŒ·å¶åŽåïŒ æ¥ã
åºå®ã®æéã確ä¿ããŠè¯ãã£ããã€ã³ãã¯ä»¥äžã§ãã å®è£
ã§å°ã£ãŠãããšããã質åããŠè§£æ¶ãããã å®è£
ãé²ããã¢ãããŒã·ã§ã³ã«ãªã å
šä»¶æåããæã¯æ°æã¡ãè¯ãã§ããé³¥ãç«ããããããã§ãã ãã®ãèªååã®æéããããããããããã¹ãèªååå®è£
ãçµãã£ãåŸã«å€§ããã®æ¹ä¿®ããã£ãŠããã¹ãèªååã¯è
ãããšãªããéçšãç¶ç¶ã§ããŠããŸãã QAãããŒã®æ¹å ä»ã«åãçµãã ã®ãQAãããŒã®æ¹åã§ãã éšã®ç®æšã§ãã£ããã¹ãã«ãŸã€ããâå·¥æ°åæžâãâå質åäžâãããã³çŸå Žã®âäžâã®è§£æ¶ãšããè»žã§æ¹åã«åãçµã¿ãŸããã æœçã®äžéš å·¥æ°åæžã®æ¹ã§ã¯èªåã§ãã£ãšããããããªãšæããããšããæ¯ãè¿ãããŒãã£ã³ã°ã§ã¡ã³ããŒãã話é¡ã«äžãã£ããã®ãæ¹åäºé
ãšããŠããã¯ã¢ããããŸããã äžèšã®æ¹åãèœã¡çããŠããã¯NotebookLMã䜿ã£ãŠãã¬ããžããŸãšããããéæ©èœèŠä»¶ã®ãã¹ã芳ç¹ãã·ã¹ãããã£ãã¯ã«çã蟌ãããAIã«äžå
·ååæãããããAIã«ãã¹ãã±ãŒã¹ã¬ãã¥ãŒããããããªã©ã«åãçµãã§ããŸãã ãã¹ãèšèšã§å€ãããšããã§ããšãæ¹ä¿®å
容ã«ãã£ãŠã¯ãã¹ãã±ãŒã¹ã®ç²åºŠã倧ããããŠãã¹ãã±ãŒã¹äœæã®å·¥æ°ãæžããããã«ããŸããã ãã¹ã宿œã®æ¹ã§ã¯ã客æ§ã¯Firefoxãã»ãšãã©äœ¿çšãããŠããªããšããäºãããŒã¿ããåãã£ãããããªã°ã¬ãã·ã§ã³ãã¹ãã¯èªåãã¹ãã«ä»»ããŠãæåã§ã®ãã¹ãã倧ããæžãããŸããã ãã¹ãã®æéã¯ãããã§ããããããŸãããå¿
èŠååãªãã¹ããå°ãªãæéã§ãããšããããšãæèããŠããŸãã ã¹ã¯ã©ã ã®æ¹å æåŸã«ã¹ã¯ã©ã ã®æ¹åãšããããšã§æã®ãã€ãªãŒã¹ã¿ã³ãã¢ããã®äžã«ããã§ãã¯ã¢ãŠããã®ã³ãŒããŒãäœãããã«ããŸããã ãã§ãã¯ã¢ãŠãã¯âäœã話ããŠãè¯ããâãšããã³ãŒããŒã§åœçªå¶ã§ãã QAé¢ä¿ã®ã話ãããããšãããã°ã奜ããªæŒ«ç»ãæ ç»ãæè¿è©±é¡ã®ââãããããã«ãªããããããã©ã¿ããªã©ãã§æè²·ã£ãŠããã¢ã¿ãã¯25圢åŒã®ã¯ã€ãºåè² ãããããç«ã®èéããåæ³ãããâèéæ¶²ïŒïŒïŒâããªããè¶³ã«ä»ããŠãŠãããèããã§ããããªã©ãªã©æããç¬ããèµ·ãããããŠããŠæ¥œãã¿ãªæéã«ãªã£ãŠããŸãã ããã¯ããŒã ã®å¿ççå®å
šæ§ãé«ããã®ã«äžåœ¹è²·ã£ãŠãããšæããŸãã ãããã®åãçµã¿ãéããŠãããŒã å
šäœãæ¹å掻åã«å¯Ÿããæèãé«ããããè¯ãQAããã»ã¹ã远æ±ããæåãéžæããã€ã€ãããŸããçŸç¶ã«æºè¶³ããã«ä»åŸãç¶ç¶çã«æ¹åãéããŠããäºå®ã§ãã ãã®æ°ãæã¯ãåã«ãã¹ããããã ãã§ãªããæ°ããããŒã ãšããŠæé·ããããã®åºç€ãç¯ãæéã§ãããä»åŸãããè¯ããããã¯ãå質ãšãã¹ãå質ã远æ±ããéçºããŒã ãšå
±ã«ã客æ§ã®ã«ã¡ã©ç®¡çãæ¥œã«ããçŽ æŽããããããã¯ããäžã®äžã«å±ããŠãããããšæããŸãã
ãã®èšäºã¯Â Safie Engineers' Blog! Advent Calendar  ã®4æ¥ç®ã®èšäºã§ãã ããã«ã¡ã¯ãã«ã«ãã£ãŒïŒã³ãã¥ãã±ãŒã·ã§ã³å®€ã® ããã ã¿ãã ã§ãã ã«ã«ãã£ãŒïŒã³ãã¥ãã±ãŒã·ã§ã³å®€ã¯ã瀟é·çŽèœçµç¹ãšããŠç€Ÿå
å€ã®åºå ±æŽ»åçãæ
åœããŠããããŒã ã§ãããæ åããæªæ¥ãã€ããããšããã»ãŒãã£ãŒã®ããžã§ã³å®çŸã«åããŠãã»ãŒãã£ãŒã«ã«ãã£ãŒããæšé²ããæŽ»åãå
å
ããŠããŸãã ç§ã¯2025幎4æãã¡ããã©åœç€Ÿã®ç€Ÿå¡æ°ã500åãè¶
ããã¿ã€ãã³ã°ã§ã»ãŒãã£ãŒã«è»¢è·ããŸãããã»ãŒãã£ãŒãäžå Žãã2021幎ããæ¯ã¹ããšç€Ÿå¡æ°ã¯2å以äžãããžãã¹ãçµç¹ãå§åçãªã¹ããŒãã§æé·ããŠããäŒç€Ÿã«å
¥ç€Ÿãããªããšæã£ãã®ãèŠããŠããŸãã äžè¬çã«ãçµç¹ãæ¡å€§ãããšãé£ã®ããŒã ãäœãããŠãããåãããªãïŒãµã€ãåïŒãããçµå¶ã®æå³ãäŒãããªãããšãã£ã課é¡ãçãŸããã¡ã§ãã å€ãã®äŒæ¥ã§ã¯ç€Ÿå
å ±ãšããã°ããã¹ããå€ããšæããŸãããç§ãã¡ã¯ãæ åããŒã¿ããæ±ãããã¯äŒæ¥ãšããŠãããã¹ãã§ã¯åãèœãšãããŠããŸããç±éãããæèããããéèŠã ãšèãããåç»ãã«ãã瀟å
ã³ãã¥ãã±ãŒã·ã§ã³ãè¡ã£ãŠããŸããããšããããšã§ãä»åã¯ç§ãæ
åœããŠãã瀟å
åç»ã¡ãã£ã¢ã空ãã¯ãã«ã€ããŠã玹ä»ããŸãã ã空ãã¯ããšã¯ çŸç¶ææ¡ã®ããã®ã¢ã¯ã·ã§ã³ çŸåšãŸã§ã«å®æœããããš ä¿¡é Œé¢ä¿ãã¬ãã¬ããžãããå
¬åŒçºä¿¡ãããããç¥ã£ãŠãã人ã ãåç»ã®åŒ±ç¹ããè£å®ããïŒÎ±ã®èŠçŽããã¹ã ã³ãã¥ãã±ãŒã·ã§ã³ã¯ç¶ããããš ã空ãã¯ããšã¯ 端çã«ãããšãã空ãã¯ïŒåç»ç€Ÿå
å ±ããšèããŠããã ããšã€ã¡ãŒãžãããããããšæããŸããã¹ã¿ãŒãããã®ã¯2023幎10æã§ãä»ãŸã§2幎以äžã«æž¡ãç¶ç¶ããŠç€Ÿå
åãã®çºä¿¡ãç¶ããŠããŸããã ã空ãã¯ãã¯éç§°ã§ãæ£åŒåç§°ã¯ã空é£ã¶ãã¯ããŠ~Safie's company newsletter~ãã§ããã»ãŒãã£ãŒã®ã·ã³ãã«ããŒã¯ã§ãã銎æã¿ã®ããã¯ããŠãã¯ç¥æµã®è±¡åŸŽãšãããŠããŸããã空ãã¯ãã®ååã«ã¯ã瀟å¡äžäººã²ãšããæã€ç¥æµãã·ã§ã¢ãããäºãã®ç¥æµã®åŸªç°ãéããŠã瀟å
ã³ãã¥ãã±ãŒã·ã§ã³ã掻çºã«ããŠãããããšããæ³ãã蟌ããããŠããŸãã 空ãã¯ã¯2ã€ã®ã«ããŽãªã§æ§æãããŠããŸãã Sadoxãµã㳠瀟é·ã®äœæž¡å³¶ãããã¹ããŒã«ãŒãšããŠèªãã³ã³ãã³ã ãã¯ããŠãã¡ã®ç¥æµæ³ 瀟å¡ã®æŽ»èºãéšçœ²ã®åãçµã¿ãèªãã³ã³ãã³ã å·ŠïŒSadoxãµãã³ã2030å¹Žç®æãããš_ã¹ãã¬ããçµç¹ã®èª²é¡ãšè§£æ±ºã«ãããŠã å³ïŒãã¯ããŠãã¡ã®ç¥æµæ³ããã¶ã€ã³ã»ã³ã¿ãŒ_ããŽãã¶ã€ã³ã®ææ³ãšãã»ãŒãã£ãŒãã€ãããã¶ã€ã³ãšã¯ã çŸç¶ææ¡ã®ããã®ã¢ã¯ã·ã§ã³ ç§ãæ
åœã«ãªã£ãŠãŸãè¡ã£ãã®ã¯ã¢ã³ã±ãŒãã§ãã瀟å¡ã®ã空ãã¯ã掻çšç¶æ³ãç¥ããä»åŸã®äŒç»ã«ãããŠåèãšããããã«è¡ãããšã«ããŸããã çµæãšããŠã90ïŒ
以äžã®äººãèªèããŠããã瀟å¡ã®2/3ã¯äœããã®ã³ã³ãã³ãã¯èŠãããšããããšããããžãã£ããªåçãåŸãããŸãããäžæ¹ã§ãèŠãããšããªãïŒããšãã瀟å¡ãå°ãªãããããç¶æ³ãããããŸãããèŠãæ©äŒããªãã£ã人ã¯å€§ããåãããšä»¥äžã®3ã€ã«åé¡ãããããšãææ¡ã§ããŸããã å¿ããèŠãæéããªã æŽæ°ã¿ã€ãã³ã°äžæ ããããååšãç¥ããªãã£ã å±ããçžæã§ããã瀟å¡ãã®çæ§ã®å£°ã確èªããããšã§ãå®éã«æŽ»åã®æ¹åæ§ã決ããããšã«ãç¹ãã£ããããåæã§ã¢ã³ã±ãŒãããšã£ãããšã¯éåžžã«æçšã§ããã çŸåšãŸã§ã«å®æœããããš ã¢ã³ã±ãŒãã宿œãã5æããçŸåšãŸã§ããŸãã¯çæç®ç·ã§ããã«ã§ããããšããã¢ã¯ã·ã§ã³ãè¡ã£ãŠããŸããã倧ããåãããšãåç¥ã®å·¥å€«ããšãããŸããŸãªç€Ÿå¡ãç»å ŽããäŒç»ãã§ãããã®ããã°ã§ã¯ãåç¥ã®å·¥å€«ãã«ãã©ãŒã«ã¹ããŠããå°ã詳ããã話ãããããšæããŸãã ä¿¡é Œé¢ä¿ãã¬ãã¬ããžãããå
¬åŒçºä¿¡ãããããç¥ã£ãŠãã人ã çªç¶ã®è©±ã§ãããå人ããæçŽãæž¡ããããšãããããããå¿
ãç®ãéããŸãããããããšåãã§åãããŒã ãé¢ä¿æ§ã®æ·±ãã¡ã³ããŒããã®Slackã¯ç®ã«ã€ããšæãã®ã§ããããããŸãããç¥ããªã人ããã®å
šäœã«åããSlackã¯èŠèœãšããã¡ã§ã¯ãªãã§ããããã ã空ãã¯ãã®åç¥ã¯ç€Ÿå
ã®SlackãæŽ»çšããŠçºä¿¡ããŠããŸãããå
šäœã¡ã³ã·ã§ã³ã§ã®ç§ããã®åç¥ã¯ãæ
å ±ã®ããã€ãºããšããŠåŠçãããŠããŸãå¯èœæ§ããããšæããŠããŸããã ããã§çç®ããã®ãã瀟å
ã«ãããããœãŒã·ã£ã«ã°ã©ãïŒäººéé¢ä¿ã®ã€ãªããïŒãã®æŽ»çšã§ããæ
åœè
ããèšããããããæ®æ®µé¢ããã®ããååãããåºæŒããã®ã§èŠãŠãã ããããšèšãããæ¹ããå§åçã«èŠèŽææ¬²ãæ¹§ãã¯ãã ã¢ããã°ãªææ³ã§ããããåºæŒè
ã«åç¥ååããé¡ãããããšãããããŒãçµã¿èŸŒãããšã§ããç¹ãã®çºä¿¡ããé¢ãã®åºããã«å€ãã工倫ãåãå
¥ããŸããã æè¿ããåºæŒè
ããã§ã¯ãªãã®ã§ããã瀟å¡ã®æ¹ãé¢çœãããšãèªèº«ã®ããŒã ã«çºä¿¡ããŠããã ããããšã§ã¢ã¯ã»ã¹ãæ¥å¢ããã±ãŒã¹ããããŸããããããã埪ç°ããã£ãšå¢ããããããã®ããã®åæãšããŠã¯ç€Ÿå¡ã®çæ§ããããããïŒããšæã£ãŠãããã³ã³ãã³ããéèŠã§ããäŒç»èªäœãåãå
¥ããŠããŸãããåŒãç¶ãè¯ãã³ã³ãã³ãäœãã«ã¯ç¹ã«æéãå²ããŠãããããšæããŸããã ãåç»ã®åŒ±ç¹ããè£å®ããïŒÎ±ã®èŠçŽããã¹ã æ åã¯å§åçã«åŸãããæ
å ±éãå€ãã®ãã¡ãªããã§ããäžæ¹ã§ããå¿ããæã«æãæ¢ããŠåç»ãèŠãã®ã¯æ£çŽããã©ããåéã ãšããŠãããšããã®ã¯æ£çŽããã®ã§ã¯ãšæããŸãã ãã®ããã空ãã¯NotionããŒãžã§å
¬éããéã«ãèå³ããããããã¯ãã©ãããæ°ç§ã§å€æã§ããããã«ãåç»ã§è©±ãããŠããããšããç®æ¡æžãã§æ·»ããããã«ãã工倫ãã¯ãããŸããã ãŸããèŠçŽã®äœæã«ã¯NotebookLMã«ç·šéããæ åãèªã¿èŸŒãŸããŠãããããããã¹ãæ¡ãæ€èšããããšã§å¹çåãé²ããŠããŸãã ã³ãã¥ãã±ãŒã·ã§ã³ã¯ç¶ããããš æ
åœãåŒãç¶ãéã«åä»»æ
åœè
ã®ã³ã¡ã³ãã§æãå°è±¡ã«æ®ã£ãããšã¯ãç¶ç¶ããŠçºä¿¡ãç¶ããããšã倧äºã«ããŠããããšãã話ã§ããéŠãããããã«ãªããããåæãããŸãããããã¯ãç§ãã³ã³ãã³ãã®çºä¿¡ã¯ç¶ç¶ããŠç¶ããŠããããšã倧äºã ãšæã£ãŠããããã§ãã çŸåšãã»ãŒãã£ãŒã¯éçºæ¬éšãå«ãã5ã€ã®æ¬éšã500人以äžã®ç€Ÿå¡ãããäŒç€Ÿã«æé·ããããžãã¹ãçµç¹ãæŽãªãé£èºã«åããŠã¿ããªã§æ©ã¿ãå éãããŠããŸãã æåŸã«ãªããŸãããã瀟å
ã®æŠç¥ãéçºç§è©±ãªã©ãå«ãŸãããããã空ãã¯ããèŠãããšãã§ããã®ã¯ç€Ÿå¡ã ãã®ç¹æš©ã§ããã»ãŒãã£ãŒã®ãä»äºã«ãèå³ãããæ¹ã¯ æ¡çšãµã€ã ããã²ã芧ãã ããã safie.co.jp ãã®èšäºãèªãã§ããã ããæ¹ãã仲éãšãªãåç»ãèŠãããã¯ããŸãåºæŒè
ãšããŠç»å Žããããšããæ¥ãæ¥ãã®ã楜ãã¿ã«ããŠããŸãã ä»åŸããããé¢çœããã圹ç«ã€ããæ¥œããã空ãã¯ã®çºä¿¡ãæåŸ
ããŠããã ãããšå¬ããã§ãïŒ
ã¯ããã« ãã®èšäºã¯ Safie Engineers' Blog! Advent Calendar ã®3æ¥ç®ã®èšäºã§ãã ããã«ã¡ã¯ãæè¡åºå ±ã®ãããïŒ @hitsan ïŒã§ãã 2024幎ã®äžç€ããæè¡åºå ±ãã¯ããã2025幎ã¯ã»ãŒãã£ãŒã«ãšã£ãŠ ãæè¡åºå ±æŽ»åãæ¬æ Œå§åããã幎ã ãšãããéåžžã«å€§ããªç¯ç®ã®1幎ãšãªããŸããã ãããŸã§ãæè¡çºä¿¡ã¯è¡ã£ãŠããŸããããä»å¹Žã¯çºä¿¡æ°ãå¢ããããšã«æ³šåããŸããã æ¬èšäºã§ã¯ãã»ãŒãã£ãŒã®æè¡åºå ±ãæ²ããããã·ã§ã³ãšã2025幎ã«åãçµãã å
·äœçãªæœçã«ã€ããŠæ¯ãè¿ããŸãã ã¯ããã« ã»ãŒãã£ãŒã«ãããæè¡åºå ±ã®ããã·ã§ã³ ãã¡ã³ãå¢ãããããããåºãã 2025å¹Žã®æŽ»å 1. ã€ãã³ãç»å£æ°ãå¢ãããã 2. æè¡åºå ±å°çšXã¢ã«ãŠã³ããã€ãã£ãã çŽè¿ã®ã€ãã³ãæ
å ± BASEãšã»ãŒãã£ãŒãèªãããã¯ãšã³ãéçºã®æè¡çè² åµè§£æ¶ãžã®éã®ã çæAIã§æ¥åãæ¹åãNightïŒ ãããã« ã»ãŒãã£ãŒã«ãããæè¡åºå ±ã®ããã·ã§ã³ ãã¡ã³ãå¢ãããããããåºãã æè¡åºå ±ãšããŠæ²ããŠããæå€§ã®ããã·ã§ã³ããã㯠瀟å
å€ã«ã»ãŒãã£ãŒã®ãã¡ã³ãå¢ããããš ã§ãã ãã®èšèã«ã¯2ã€ã®æå³ã蟌ããããŠããŸãã ãã»ãŒãã£ãŒã£ãŠæè¡çã«é¢çœãäŒç€Ÿã ãããšèªç¥ããŠãããããšã ãšã³ãžãã¢èªèº«ãèªåãã¡ã®éçºããŠãããããã¯ãã¯ããããšèžã匵ããç¶æ
ãäœãããšã ã©ãã»ã©ããããã¯ããè¯ããŠãäŒãããªããã°ãã¡ã³ã¯å¢ããŸããããã®ããã·ã§ã³ãéæããããã«ã以äžã®ãããª3幎èšç»ãçå®ããŸããã 幎床 ãã§ãŒãº 2025幎 çºä¿¡æåã®éžæ 2026幎 èãæãæèããçºä¿¡ 2027幎 ããã¯ãã©ã³ãã®ç¢ºç« 2025å¹Žã®æŽ»å 2025幎ã®ããŒãã¯ãåå£ã¥ãããšçºä¿¡æåã®éžæãã§ãã æåãäœãããã«ã¯ããŸãè¡åã®ç·éãå¢ããå¿
èŠããããŸããããã§æåžæ°ãå¢ãããŸããã çºä¿¡æ°ïŒæåžïŒãå¢ããã°ããèªåãã¡ã¯æè¡çºä¿¡ãããçµç¹ã ããšããèªèãçãŸãã 第äžè
ã®ç®ã«è§Šããããšã§ããèªåãã¡ãåœããåã«ãã£ãŠããããšã¯ãå®ã¯ãããããšãªãã ããšæ°ã¥ãã ããããå®çŸããããã«ãå
·äœçã«å®è¡ããæœçãã玹ä»ããŸãã 1. ã€ãã³ãç»å£æ°ãå¢ãããã ä»å¹Žã¯ã€ãã³ããžã®åå ã»é嬿°ã¯æšå¹Žãšæ¯èŒããŠ2åã«ãªããŸããã 2024幎ãŸã§ã¯äŸé Œãããã°ç»å£ãããšããã¹ã¿ã³ã¹ã§ããã2025幎ããã¯ä»ç€Ÿãšå
±å¬ããŠã€ãã³ããäŒç»ããããã«ãªããŸããã äŒç»ããè¡ãããšã§ãã¿ãŒã²ããå±€ãäŒãããæè¡ããŒããã³ã³ãããŒã«ã§ããããã«ãªãã以äžã®ãããªãããã¯ãæ·±ãæãäžããããšãã§ããŸããã æ åè§£æã¢ããªã±ãŒã·ã§ã³ã®éçºãã©ãããã©ãŒã æ§ç¯ã®çŽ¹ä» è¥æãšã³ãžãã¢ã®æŽ»èº å€§èŠæš¡ãããã¯ãã«ãããæè¡çè² åµã®è§£æ¶ äŒç»ããæºããããšã§ãåå è
ããã®ãã£ãŒãããã¯ããšã³ãžãã¢ãžçŽæ¥éå
ãããµã€ã¯ã«ãäœããŠããŸãã 2. æè¡åºå ±å°çšXã¢ã«ãŠã³ããã€ãã£ãã å
æãã»ãŒãã£ãŒæè¡åºå ±ã¢ã«ãŠã³ãïŒ @SafieDev ïŒãæ°ãã«éèšããŸããã ã¯ãããŸããŠïŒãã®ã¢ã«ãŠã³ãã¯ãã»ãŒãã£ãŒã®æè¡æ
å ±ããšã³ãžãã¢ã®åãçµã¿ãçºä¿¡ããã¢ã«ãŠã³ãã§ãð ãšã³ãžãã¢ã®çãããæ°ã«ãªãæ
å ±ããå±ãããŸãã ãã²ãæ°è»œã«ãã©ããŒããŠãã ããïŒ #ã»ãŒãã£ãŒ #ãšã³ãžã㢠#éçºè
#æè¡åºå ± — ã»ãŒãã£ãŒæè¡åºå ± (@SafieDev) 2025幎11æ7æ¥ ãããŸã§ã¯äŒæ¥å
¬åŒã¢ã«ãŠã³ãããçºä¿¡ããŠããŸãããã以äžã®çç±ããç¬ç«ãããŸããã ãšã³ãžãã¢ãPdMããã¶ã€ããŒã«ç¹åããæ
å ±ãå±ããã ãšã³ãžãã¢ã®æ¥åžžçãªåãçµã¿ã詊è¡é¯èª€ãçºä¿¡ããã äŒæ¥ã®å
¬åŒã¢ã«ãŠã³ããããé«é »åºŠã§æçš¿ããã ã¢ã«ãŠã³ããåããããšã§ãããã¯ããã°ã®æŽæ°æ
å ±ãã€ãã³ãæ
å ±ã«å ããéçºçŸå Žã®ç©ºæ°æãäŒãããããªçºä¿¡ã匷åããŠããŸãããã²ãã©ããŒããé¡ãããŸãïŒ çŽè¿ã®ã€ãã³ãæ
å ± 12æã¯æ³šç®ã®ã€ãã³ãã2ä»¶éå¬ããŸãããã²ãåå ãã ããã BASEãšã»ãŒãã£ãŒãèªãããã¯ãšã³ãéçºã®æè¡çè² åµè§£æ¶ãžã®éã®ã ææ¥ã12/4(æš)ã«BASEæ ªåŒäŒç€Ÿæ§ãšå
±å¬ã§ããã¯ãšã³ãã®æè¡çè² åµã«ãã©ãŒã«ã¹ããã€ãã³ããéå¬ããŸããã»ãŒãã£ãŒããã¯ãå€§èŠæš¡ãªã¢ãŒããã¯ãã£ã®åãçµã¿ã«ã€ããŠç޹ä»äºå®ã§ãã safie.connpass.com çæAIã§æ¥åãæ¹åãNightïŒ 12/15(æ)ã«ã¯ãçæAIãæŽ»çšããæ¥åæ¹åã€ãã³ããéå¬ããŸãã ãã¡ãã¯LTãã»ãã·ã§ã³ã§ã¯ãªããã¯ãŒã«ãã«ãã§åœ¢åŒãæ¡çšãåå è
å
šå¡ã§æ¥åæ¹åã®ã¢ã€ãã¢ããã£ã¹ã«ãã·ã§ã³ããåå åã€ãã³ãã§ãã safie.connpass.com ãããã« 2025å¹Žã®æŽ»åãæ¯ãè¿ããŸããããæ£çŽã«èšãã°ãå
šå¡ãèªç¶ãšçºä¿¡ããæåã«ã¯ãŸã å°éã§ããŠããŸããã ä»å¹Žã¯ã€ãã³ããšããå Žãçšæããæåžæ°ãå¢ããããšã«ã¯æåããŸããããããããããçµç¹å
šäœã®ç¿æ
£ãšããŠå®çãèªèµ°ããŠãããŸã§ã«ã¯ããŸã ããã€ãã®ããŒãã«ããããŸãã ãŸã ãŸã ææ¢ãã§ããããããããèµ°ãç¶ããã®ã§2026幎ã®ã»ãŒãã£ãŒã®æè¡çºä¿¡ã«ãããã²ãæåŸ
ãã ããã
ãã®èšäºã¯ Safie Engineers' Blog! Advent Calendar 2æ¥ç®ã®èšäºã§ãã ã¯ããã« ç§ã«ã§ããããš æ°ãã«äœã£ããã® ã¢ããªã®çŽ¹ä» äœã£ããã£ãã äœãæ¹ AWS Bedrockã§ãé¡ãçæ Next.jsã§UIå®è£
AWS Amplifyã§ããã〠çµããã« ã¯ããã« ããã«ã¡ã¯ïŒã»ãŒãã£ãŒã«25æ°åã§å
¥ç€ŸããAIéçºéšã«é
å±ãããå·äžã§ãã åŠçæä»£ã¯ç ç©¶ã§ãäººã®æ©ãæ¹ãè§£æããAIã®éçºãããŠããŸããã ãããŠé
å±åã«è¡ãããç ä¿®ã§ã¯ã瀟å
ååã管çããã¢ããªTreasure CollectionãéçºããŸãããïŒTreasure Collectionã®èšäºã¯åŸæ¥æ²èŒãããã®ã§ãã²ãäžèªãã ãããïŒ ãã®èšäºã§ã¯ç§ãæ°ããªæè¡é åã身ã«ä»ããããã«ã¢ããªã®éçºã«ææŠãã話ãããããšæããŸãã ç§ã«ã§ããããš å
ã«è¿°ã¹ãããã«ãåŠçæä»£ã¯Pythonãã€ãã£ãŠæ åã®ç ç©¶ãããŠããŸããããããŠç ä¿®ã®Treasure Collectionã®éçºã§ã¯ãå
¥ç€ŸãããŸã§ã«äœéšããããšããªãã£ãããã³ããšã³ãé åãæ
åœããŸãããç ä¿®ãçµããŠãããã³ããšã³ããšããã¯ãšã³ãïŒããŒã¿åŠçïŒã®é åãçµéšãããšã³ãžãã¢ã«ãªããŸããã ããããªãããã€ã³ãã©é åãåãããªããšããæ°ã¥ããåŸãŸããã Treasure Collectionã¯Webã¢ããªã§ããããã€ãªã©ã®ã€ã³ãã©åãã¯ãã¹ãŠããŒã ã¡ã³ããŒãå®è£
ããŠãããŸãããããã³ããšã³ãã®æè¡ã¯èº«ã«ã€ããããŸããããã¢ããªããŠãŒã¶ãŒã«å±ããæ¹æ³ãåãããªããšããç¶æ³ã«ãªããŸããã æ°ãã«äœã£ããã® ãããããç ä¿®ãçµããåŸã«éçºãã ice-breaker ãšããWebã¢ããªã®ç޹ä»ãããŸãããã®ã¢ããªãäœã£ãããšã§æ°ããªæè¡é åãäœéšã§ãããŠãŒã¶ãŒã«äœã£ããã®ãå±ããããããã«ãªã£ãã®ã§ãããå
±æã§ããã°ãšæããŸãã ã¢ããªã®çŽ¹ä» ice-breakerã¯ããŒãã£ã³ã°ãªã©ã®åé ã§è¡ãã¢ã€ã¹ãã¬ã€ã¯ã»ãã§ãã¯ã€ã³ã®ãé¡ãæäŸããŸãã ã¢ã€ã¹ãã¬ã€ã¯ãšãã§ãã¯ã€ã³ã¯å°ãç°ãªããã®ã§ããã倧ãŸãã«ä»¥äžã®ããã«èª¬æã§ããŸãã ã¢ã€ã¹ãã¬ã€ã¯ããã§ãã¯ã€ã³ãšã¯ ç®çïŒéãŸãã®åé ã§ãåå è
ã®éã®ç·åŒµãã»ãããå Žã«æŽ»æ°ãäžäœæãçã¿åºãããšã ç¹åŸŽïŒãå Žãã®é°å²æ°ã¥ããã«çŠç¹ãåœãŠãã å€ãã®å Žåãã²ãŒã ãç°¡åãªã¢ã¯ãã£ããã£åœ¢åŒã§è¡ãããã åå è
åå£«ãæ°è»œã«è©±ãããã£ãããæäŸããæ¬é¡ã«å
¥ãåã®å¿ççãªéå£ãåãé€ãã ãã®ã¢ã€ã¹ãã¬ã€ã¯ããã§ãã¯ã€ã³ã¯ã»ãŒãã£ãŒã«å
¥ç€ŸããŠããäœåºŠãè¡ã£ãŠããŸããããããŠãã®åºŠãã¢ã€ã¹ãã¬ã€ã¯ããã§ãã¯ã€ã³ã«åœ¹ç«ã€ã¢ããªãéçºããŸããã ã¢ããªã«ã¢ã¯ã»ã¹ãããšæ¬¡ã®ãããªç»é¢ã衚瀺ãããŸãã ç»é¢å·ŠåŽã®â話é¡ãçæâãã¿ã³ãæŒããšãã¿ã³ã®äžã«ãé¡ã衚瀺ãããŸãã åå è
äžèЧã«ååãå
¥åãâ远å âãã¿ã³ãæŒããšåå è
ã远å ãããŠãããŸãã âæ¬¡ã®çºè¡šè
âãã¿ã³ãæŒããšãã¿ã³ã®å·Šã«æ¬¡ã®çºè¡šè
ã衚瀺ãããçºè¡šæžã¿ã«çºè¡šè
ã远å ãããŸãã âæ¬¡ã®çºè¡šè
âãã¿ã³ãäœåºŠãæŒããŠãå
šå¡ãçºè¡šæžã¿ã«è¿œå ããããšâçµäºïŒå
šå¡è©±ãçµãããŸããâãšè¡šç€ºãããŸãã äœã£ããã£ãã é
å±åã«è¡ã£ãŠããç ä¿®ã®é±æ¬¡å®äŸã®åé ã«ã10åçšåºŠã®ã¢ã€ã¹ãã¬ã€ã¯ãè¡ã£ãŠããŸããã ã¢ã€ã¹ãã¬ã€ã¯ã®ãé¡ã¯ãã®éœåºŠèããŠããããã«ããé¡ã«å°ãããšããããŸããã ãŸãé²ãæ¹ã¯ãé¡ãèãã人ãæåã«çºè¡šããŠãçºè¡šããäººãæ¬¡ã®çºè¡šè
ãæåãããšããæ¹åŒããšã£ãŠããŸããããã®é²ãæ¹ã¯ã¢ã€ã¹ãã¬ã€ã¯ãçãäžããããæ¹æ³ã§ããããããããå
šå¡çºè¡šããïŒããšç¢ºèªããããæ¬¡èª°ã«ãããããšæ©ãã ãããŠãæéã䜿ã£ãŠããŸãããã«ã¢ã€ã¹ãã¬ã€ã¯ã®äºå®æéãå°ãè¶
ããŠããŸããšããåé¡ããããŸããã è¡ã£ãŠããã¢ã€ã¹ãã¬ã€ã¯ã®ãããä¿ã¡ãªãããå°ãããšã解決ããããã®ã¢ããªãäœã£ãŠã¿ãããšæã£ãããšããã®ã¢ããªãäœã£ããã£ããã§ãã äœãæ¹ ããããã¯ã¢ããªã®äœãæ¹ã説æããŸãã AWS Bedrockã§ãé¡ãçæ ãŸããã¢ããªã®æ žãšãªããé¡ã®çæã«ã€ããŠã§ãã ãé¡ã®çæã¯çæAIã§è¡ã£ãŠããŸããçæAIã¯AWS Bedrockããå©çšããŸãããAWS Bedrockã«ã¢ã¯ã»ã¹ããAPIããŒãçºè¡ããŸãã Next.jsã§UIå®è£
UIã¯Next.jsã§å®è£
ããŸãããNext.jsã䜿ã£ãçç±ã¯ç ä¿®ã§å¯äžèº«ã«ã€ããããã³ããšã³ãã®æè¡ã¹ã¿ãã¯ã ããã§ãã ã¢ããªã®æ§æã¯ä»¥äžã®ããã«ãªã£ãŠããŸãã src/app/ âââ page.tsx # ã¡ã€ã³UIïŒã¯ã©ã€ã¢ã³ãã³ã³ããŒãã³ãïŒ âââ api/ â âââ bedrock/ â âââ route.ts # Bedrock APIåŒã³åºãïŒãµãŒããŒãµã€ãïŒ âââ components/ âââ addNames.tsx # åå è
远å ã³ã³ããŒãã³ã âââ participants.tsx # åå è
衚瀺ã³ã³ããŒãã³ã UIã¯ã·ã³ãã«ãªã®ã§ãã¹ãŠã®ç޹ä»ã¯æ§ããŸããã工倫ããããšã2ã€ç޹ä»ããŸãã åã話é¡ã衚瀺ãããªãããã«ããã³ãããæ¹å api/bedrock/route.ts ã§ã¯AWS Bedrockã®APIã«ããã³ãããå«ãã ãAPI Requestãéä¿¡ããŠããŸãããã®ã³ãŒãã¯ä»¥äžã®ããã«ãªã£ãŠããŸãã import { BedrockRuntimeClient, ConverseCommand } from "@aws-sdk/client-bedrock-runtime"; import { NextRequest, NextResponse } from "next/server"; export async function POST(request: NextRequest) { try { const url = "xxx"; const history = (await request.json()).history || []; const payload = { "messages": [ { "role": "user", "content": [{"text": "ã¡ãã£ãšå€ãã£ãã¢ã€ã¹ãã¬ã€ã¯ã®è©±é¡ã1ã€è¿ããŠã" + "éå»ã®è©±é¡å±¥æŽ: " + history.join(", ") }] } ], "inferenceConfig": { "temperature": 1.0, "maxTokens": 500, "topP": 1.0, } }; const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${process.env.NEXT_PUBLIC_API_KEY}` }, body: JSON.stringify(payload) }); const data = await response.json(); return NextResponse.json({ output: data }); } catch (error) { console.error("API Error:", error); } } éå»ã®è©±é¡å±¥æŽã page.tsx ãšé£æºããŠããã³ããã«å«ããªãã話é¡ãäœåºŠãçæãããšãã«åã話é¡ã衚瀺ãããªãããã«ããŸããã Next.jsã®ãµãŒããŒãµã€ãããAPI Rrequestãéä¿¡ 以äžã®ã³ãŒã㯠page.tsx ã«å®è£
ããã話é¡ãçæãããšãã«å®è¡ããã颿°ã§ãããã®é¢æ°ã§ã¯ãŸã api/bedrock ã«API Requestãéä¿¡ããŸããããã¯Next.jsã®ãµãŒããŒãµã€ãã§å®è£
ãããŠããAPIã§ãã const onGenerate = async () => { setloading(true); const data = await fetch("/api/bedrock", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ history: history, }), }) .then((res) => res.json()) .then((data) => { setResult(data.output.output.message.content[0].text); setHistory([...history, data.output.output.message.content[0].text]); }) .catch((error) => { console.error("Error fetching data:", error); }); setloading(false); }; å
ã«èª¬æããããã«AWS Bedrockãžã®API Requestã®é信㯠api/bedrock ããè¡ãããŸãã ãã®ããã«APIãçµç±ããŠAWS Bedrockãå©çšããŠããããšã«ã¯çç±ããããŸããããã¯AWS Bedrock ãžã® API Requestã®éä¿¡ã¯ããã³ããšã³ãããè¡ããªãããã§ããã»ãã¥ãªãã£äžã®çç±ã§ãã®ä»æ§ã«ãªã£ãŠããŸãã ä»åéçºã«çšããNext.jsã§ã¯å¥éããã¯ãšã³ããµãŒããŒãç«ãŠãã«ãµãŒããŒãµã€ãã«APIãšã³ããã€ã³ããç«ãŠãããšãã§ããŸããå³ããããéçºäžã«çãã課é¡ã解決ãããã¹ã ãŒãºãªéçºãé²ããããšãã§ããŸããã AWS Amplifyã§ããã〠ããŒã«ã«ç°å¢ã§åäœç¢ºèªãå®äºãããããããã€ã®æºåã§ãã ãããã€ã¯AWS Amplifyã§è¡ããŸãããAWS Amplifyã䜿ã£ãŠæ³å以äžã«æè»œã«ãããã€ãè¡ããŸããã AWS Amplifyãžã¯Githubçµç±ã§ã¢ããªããããã€ã§ããŸãã äœæããã¢ããªãGithubãžpushããã以äžã®AWSã®ããã¥ã¢ã«ã«åŸã£ãŠèšå®ãè¡ããŸãã https://docs.aws.amazon.com/ja_jp/amplify/latest/userguide/setting-up-GitHub-access.html#setting-up-github-app èšå®åŸã«AWS Amplifyã«ã¢ã¯ã»ã¹ãã以äžã®æµãã§AWS Amplifyäžã«ã¢ããªãäœæããŸãããããã€ããŒã¯GithubãéžæããŸããã ãããŸã§é²ããŠãåé¡ããªããã°ãã¹ãŠã®ã¢ããªããããããã€ãå§ãŸã£ãŠããããšã確èªã§ããŸãã5åçšåºŠåŸ
ã€ãšããããã€æžã¿ã«å€ãã£ãŠããŸããã ãã®æç¹ã§ãã¢ããªã¯ãããã€ããã¢ã¯ã»ã¹ããããšãã§ããŸãããããäžã€å¿
èŠãªèšå®ããããŸãã ç°å¢å€æ°ã®èšå®ã§ãã ãã¹ãŠã®ã¢ããªããããããã€ããã¢ããªãã¯ãªãã¯ããŸãããµã€ãã¡ãã¥ãŒã®ãã¹ãã£ã³ã°ãç°å¢å€æ°ãéžæããŠã以äžã®ç»é¢ã«é·ç§»ããŸãã ããã§å€æ°ã¯ããŒã«ã«ç°å¢ã§äœ¿ã.envãã¡ã€ã«ã§æ±ºãã倿°åã§ããå€ã¯ååŸæžã¿ã®AWS Bedrockã®APIããŒãå
¥åããŸãã ãããŸã§è¡ããšã¢ããªã¯ããŒã«ã«ãšåãããã«åäœããŸãããããã€ã»ãªãªãŒã¹ã®å®äºã§ãã çµããã« ãã®èšäºã§ã¯ç§ãåããŠèªèº«ã®åã§ãããã€ãè¡ã£ãã¢ããªã®ç޹ä»ãããŸããã ã¢ããªãäœã£ãŠã¿ãŠèããããšã倧ãã2ã€ãããŸãã 1ã€ç®ã¯ãœãããŠã§ã¢ãµãŒãã¹ã®ç解床ãäžãã£ãããšã§ãããããŸã§ã¯ã©ããã£ãããµãŒãã¹ãšããŠåäœãããã ãããšããæŒ ç¶ãšããçåãæ±ããªããéçºãªã©ãè¡ã£ãŠããŸããããããã©ããã£ããããããææ®µã1ã€ã§ãç¥ããããšã¯ãšãŠãè¯ãããšã ãšæããŸãã 2ã€ç®ã¯å¥ã®AWSãµãŒãã¹ãå©çšããããšæã£ãããšã§ããç§ã¯AIéçºã«é·ãéæºãã£ãŠããŸãããããããã¯ããŒã«ã«ç°å¢ã®ãã·ã³ã§åäœãããã ãã§ããããããæ©ã«ãªãªãžããªãã£ãæã£ãAIã䜿ã£ãã¢ããªããŠãŒã¶ãŒã«å±ããŠã¿ãããšæããŸããã ç§ãã»ãŒãã£ãŒã«å
¥ç€ŸããŠ8ã«æçµã¡ãŸãããããã®éæ°ããæè¡é åãäœéšã身ã«çããªãã課é¡è§£æ±ºã«åãçµããŠããŸãããã®èšäºãèªãã§ããã ãã人ã«ãšã£ãŠãã»ãŒãã£ãŒã§åããªããã©ã®ããã«æè¡ã身ã«çãæé·ã§ããããäŒãããšå¹žãã§ãã
ãã®èšäºã¯ Safie Engineers' Blog! Advent Calendar  1æ¥ç®ã®èšäºã§ãã ã¯ããã« ããããã1on1ããšã¯ïŒ å®çŸ©ã®åç¢ºèª 1on1 ã®ãŽãŒã«ïŒããããå§¿ïŒ äººã«ãã©ãŒã«ã¹ãã察話å1on1ã®ããã å
·äœçãªè³ªåäŸïŒïŒãæè¿ã©ãïŒããããè¯ããã工倫 å
·äœçãªè³ªåäŸïŒïŒæªæ¥å¿åãžã®èªå° 1on1 ã¯çµç¹éçºã®æåç· æåŸã« ã¯ããã« ã»ãŒãã£ãŒã® VPoE å
Œ éçºæ¬éš ãšã³ãžãã¢ãªã³ã°ãªãã£ã¹ 宀é·ã®æŠç°ã§ãã 2023幎ã«ã»ãŒãã£ãŒã«å
¥ç€Ÿãããšã³ãžãã¢çµç¹ã®çµç¹éçºã«åãçµããšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒãšããŠæŽ»åããŠããŸããã»ãŒãã£ãŒã§ã¯åµæ¥åœåãã 1on1 æå ãæ ¹ä»ããŠãããç§èªèº«2025幎ã«ã¯600件以äžã®1on1ã宿œããŸãããåè·ãå«ãããšã³ãžãã¢çµç¹éçºã®çµéšãšãã³ãŒãã³ã°ãæ¬è³ªè¡ååŠãªã©ã®åŠã³ã掻ããããã©ã€ïŒãšã©ãŒããåŸãã1on1ã®æ¬è³ªãã玹ä»ããŸãã ãããã ã1on1ããšã¯ïŒ å®çŸ©ã®åç¢ºèª ç§ãèãã1on1ã®å®çŸ©ã¯ä»¥äžã®éãã§ãã ð¡ 1on1ãšã¯ïŒ 1on1ãšã¯ãã¡ã³ã¿ãŒãšã¡ã³ãã£ãŒã宿çã«ãã³ããŒãã³ã§è¡ãããŒãã£ã³ã°ã®ããšã 人äºè©äŸ¡ãç®çãšããé¢è«ãšã¯ç°ãªãã äººã®æé·ä¿é²ãšçµç¹ã®æŽ»æ§å ãäž»ãªç®çãšãããäžåžã»éšäžã®é¢ä¿æ§ã«éããã人ãšçµç¹ã®æé·ãä¿ãããã®å¯Ÿè©±ã®å Žã§ããã ãã®1on1ã®å®çŸ©ã«ã¯ ããããæ£è§£ããšããåã¯ãããŸããã 1on1ã§ã¯ãæ¥åã®è©±ã¯ãã¹ãã§ã¯ãªãããšããäžè¬çãªé¢šæœ®ããããŸãããç§ã¯ãã®éãã§ã¯ãªããšèããŸãã ãªããªããã¡ã³ãã£ãŒãç®ã®åã®æ¥åã§å°ã£ãŠããã®ã«ãããã解決ããŠããããããããªã人ã«èããªãã®ã¯ãã©ã¹ãã¬ãŒã·ã§ã³ãããŸãã ããç¡çã«ãã£ãªã¢ã®è©±ã«èªå°ããããã ã¡ã³ãã£ãŒãæ¬åœã«æ±ããŠãã話 ãããããšããçµæçã«æé·ã«ã€ãªãããŸãã 1on1 ã®ãŽãŒã«ïŒããããå§¿ïŒ ã§ã¯ãç®æãã¹ã1on1ã®ãŽãŒã«ïŒããããå§¿ïŒã¯äœã§ããããã ããã¯ ãæ¬¡ã1on1ããããã ãšæã£ãŠããããç¶æ³ãäœãããšã§ãã 1on1ã¯ãäžåºŠããã®ã€ãã³ãã§ã¯ãªã ç¶ç¶ããŠããæå³ã®ãããã® ã«ãªããŸãã ååãããç¶æãã察話ãéããããšã§åããŠãäººã®æé·ãšçµç¹ã®æŽ»æ§åãšããç®çã«è¿ã¥ããŸãã ã¡ã³ã¿ãŒã®ã¹ã¿ã³ã¹ ã¡ã³ãã£ãŒã®ç¶æ³ã«åãããŠèšæ©å¿å€ã«å¯Ÿå¿ãã å
·äœçãªè¡å æ¥åã®è©±ãããã£ãªã¢ã®è©±ããããã³ãŒãã³ã°ãããã°ããã£ãŒãã³ã°ããã éèŠããããš ãã®ç¬éã1on1çŽåŸã«å¿å°ããæéãäœãããšã§ã¯ãªããæã«ã¯ãã¬ãã£ããªãã£ãŒãããã¯ãå¿
èŠ ç®æãç¶æ³ã 察話åŸãæéçµéãšå
±ã«æ°ã¥ãããããè¡åå€å®¹ãä¿ããçµæã䌎ãããšããããŠã察話ãç¶ç¶ã§ããŠããããšã 人ã«ãã©ãŒã«ã¹ãã察話å1on1ã®ããã ãæ¬¡ãããããããšæã£ãŠãããããã®ã³ãããã㯠ã察話ããããç¶æ³ã ãäœãããšã§ãã 察話ããããã®éµã¯ããäºïŒã³ãïŒãã§ã¯ãªã ã人ïŒããïŒãã«ãã©ãŒã«ã¹ ãã質åãããããšã«ãããŸãã â
ãäºããžã®è³ªå vs. ã人ããžã®è³ªå äŸãã°ãã¡ã³ãã£ãŒããé£ãã«è¡ã£ãŠããŸããããšè©±ããå Žåã®è³ªåäŸã§ãã 質åã®çŠç¹ å
·äœçãªè³ªåäŸ ã¡ã³ãã£ãŒã®ååããæ¹ äºã(ã³ã)ã - ã©ãè¡ããŸãããïŒ - é£ããŸãããïŒãããã äºå®ã®æ·±å ã 人ã(ãã)ã - 楜ãããŸãããïŒ - é£ã奜ããªãã§ããïŒ èªåã«åãåã£ãŠãããŠãã ãšæãã話ãããããªã 人㮠ææ
ïŒæ¥œããã奜ããªã©ïŒã«å¯ãæ·»ã 質åãæèãããšãã話ããããããªããŸãã äŸãã°ä»äºã§å€±æãããšãã¯ãªã倱æãããã®ãïŒã§ã¯ãªãããã®æã©ãæã£ãïŒã©ãæãããïŒãªãããæããã®ãïŒã¡ã³ã¿ãŒã®èªåã¯ã©ãæã£ããïŒäŸãã°æ²ããã£ããšãïŒãªã©ããäºãã®ææ
ãæ·±å ãã·ã§ã¢ããããšã§ãã人ã«åãåããããã«ãªããŸãã å
·äœçãªè³ªåäŸïŒïŒãæè¿ã©ãïŒããããè¯ããã工倫 1on1 ã®åãã«ãæè¿ã©ãïŒãããå§ãŸãããšã¯ãããããšæããŸãã ãã ããã®ãæè¿ã©ãïŒãã ãã§ã¯ãå°ããã£ãããªãã§ãã æåã®å°å
¥ãšããŠããã² ã¡ã³ã¿ãŒã®ææ ãä»ãå ããŠã»ããã§ãã ãããããšã¡ã³ãã£ãŒã¯ãã話ãããããªããŸããããã¯ã ã¡ã³ã¿ãŒã®æ°æã¡ïŒææ
ïŒãå
ã«äŒããŠãã ããšã§ãå
±æãçã¿ãããã¹ã ãŒãºãªå¯Ÿè©±ã«ã€ãªãã广ããããŸãã ããè¯ã質åäŸ ãã€ã³ã æè¿ã©ãïŒ ããå®äŸã§ã®ÃÃã®çºè¡šè¯ãã£ããå
容ãã ãã© ã€ãã€ã話ããŠããŠæåããã ããžãã£ããªææ ãäŒãã話ããã£ãããäœã æè¿ã©ãïŒ æ®æ¥æéãå€ããªã£ãŠãããããªã®ã§ ã¡ãã£ãšå¿é
æžå¿µç¹ïŒå¿é
ïŒ ãäŒããå®å
šãªå Žã§è©±ãããšãä¿ã â æ³šæãã¹ã質åäŸ ãæè¿ã©ãïŒå
æ°ããªãããã«æããã©å€§äžå€«ïŒ äœããã£ãïŒ ãã¯è¯ã質åã§ã¯ãããŸããã ãªããªããäœããã£ãïŒãã¯ã äºã®æ·±å ã ã«ã€ãªããããã§ããæ¬åœã«å
æ°ããªããšãã¯ãæ¥åžžã®å°ããªããšã®ç©ã¿éãã§ããããšãå€ãããç¹å¥ãªããšã¯ãããŸããããšããåçã§å¯Ÿè©±ãçµãã£ãŠããŸãå¯èœæ§ããããŸãã ããã æè¿ã©ãïŒå
æ°ããªãããã«æããã©å€§äžå€«ïŒ å¿é
ã§ãã å¿é
ããŠããæ°æã¡ãæ£çŽã«äŒããŠåå¿ãåŸ
ã¡ãŸãããã è£è¶³ ã¡ãªã¿ã«ç§ã¯1on1ãå§ãŸãåã«ãã®äººã®Goodãã€ã³ããæ¢ããšããäºåæºåããããããŸãããã¬ãã£ããªæ
å ±ã¯åºãããããã§ãããããžãã£ããªæ
å ±ã¯ãªããªã衚ã«åºãŠããŸããã1on1ã§ããžãã£ãæ
å ±ã亀æã§ããã°çµç¹å
šäœã®é°å²æ°ã«ãã€ãªãããŸãããã²ãEMã¯ããžãã£ãæ
å ±ãåžžã«æŸã£ãŠ1on1ã«ã€ãªããŠã»ãããšæããŸãã å
·äœçãªè³ªåäŸïŒïŒæªæ¥å¿åãžã®èªå° 1on1ã¯éå»ã®æ¯ãè¿ãïŒãµããããïŒã«ãªããã¡ã§ãã¯ã¯ã¯ã¯ãã«ããåŸåããããŸããéå»ã®çµæã¯åãããã£ãŠããããã§ãã ã§ããã ã æªæ¥ã®è©± ã«èªå°ããŸãããã 質åäŸ ç®ç ååããä»åãŸã§ã® èªå·±æºè¶³åºŠãäœç¹ ãããŸããïŒïŒ100ç¹æºç¹ã§ïŒ ã¡ã³ãã£ãŒã®çŸç¶èªèãåŒãåºã ïŒäŸïŒ60ç¹ãšåçïŒ40ç¹è¶³ããŠããªããã©ããã® 40ç¹ãå¢ããããã«ã¯äœãå¿
èŠã§ããïŒ ç§ãäžç·ã«ååã§ããããšãããŸããïŒ æ¬¡åãŸã§ã® Next Action ãã¡ã³ãã£ãŒäž»äœã§æ±ºãã æªæ¥ã®è©± ãžèªå°ãã ããã§ã®ãã€ã³ãã¯ãã¡ã³ãã£ãŒåŽã ãã§ãªãã ã¡ã³ã¿ãŒåŽã®Next Actionãæ±ºããããš ïŒå°ããªããšã§OKïŒããäºãã®ã³ãããã¡ã³ãã«ãããäžäœæãçãŸããŸãã 1on1 ã¯çµç¹éçºã®æåç· äŒç€Ÿãçµç¹ã¯äººã®éãŸãã§ããã çµç¹ïŒäºº ã§ãã 1on1ã¯ããã®äººã®ããšãç¥ãããã® äžçªã®ææ®µ ã§ãããçµç¹éçºã®æåç·ã§ãã1on1ãæ©èœããããšã§æ
å ±ãæµéããçµç¹ã掻æ§åãããã£ããã«ãªããŸãã ãã²EMïŒãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒïŒã®çããã«ã¯ããã®1on1ã䜿ãããªããŠã»ãããšæããŸãã æ£è§£ããªãããããé¢çœãïŒ ãã®èšäºããããªãã®1on1ãæ¥œãããã£ããã«ãªãã°å¹žãã§ãã ð ãŸãšãïŒäººã«åãåã1on1ã®5ã€ã®èŠç¹ 1. åºæ¬ã¹ã¿ã³ã¹ã 1on1ã®ããæ¹ã«æ£è§£ã¯ãªã (ã¡ã³ãã£ãŒã®ç¶æ³ã«èšæ©å¿å€ã«å¯Ÿå¿ãã) 2. ç®çãã 人ïŒãšçµç¹ïŒãæé·ããããã«ã人ïŒãšçµç¹ïŒã«åãåãæéã 3. ãŽãŒã«ã ãæ¬¡ã1on1ããããã ãšæã£ãŠãããããšïŒç¶ç¶ã«ããæé·ãšææïŒ 4. ã³ã ãã ãäºãã§ã¯ãªã ã人ãã«ãã©ãŒã«ã¹ ãã質åã§ããã å
±æãšæ°ã¥ã ãäžãã 5. äŸ¡å€ ãã çµç¹éçºã®æåç·ãšããŠã æ
å ±æµéãšçµç¹æŽ»æ§å ã®ãã£ãããšãªã 6. é¡ããã 1on1 èªäœã楜ãããïŒ æåŸã« æ¬èšäºã§ã¯ãç§ãåãçµãã§ãã1on1ã®å®è·µã®äžéšãã玹ä»ããŸããã 1on1 ã¯å¥¥æ·±ãèªåèªèº«ããŸã ãŸã è¶³ããŠããªãéšåããããåžžã«ãµããããã宿œäžã§ãã ãŸãããã€ã³ãã¯ã»ãã«ãããïŒäŸãã°ã1on1 ã®æ
å ±ãã©ãä»ã®äººã«ã·ã§ã¢ããŠçµç¹å€é©ã«äœ¿ã£ãŠãããïŒãšèããŠããæ¥ã
奮éäžã§ãããŸããã€ãå¥ã®æ©äŒã«ã玹ä»ã§ããã°ãšæããŸãã æåŸã«å®£äŒã§ãïŒã»ãŒãã£ãŒã§ã¯ äžç·ã«åã仲éãåéäž ã§ãïŒ å°ãã§ããèå³ãæã£ãŠããã ãããããã²ä»¥äžã® æ¡çšãµã€ã ãèŠããŠã¿ãŠãã ããã
ã¯ããã« ããã«ã¡ã¯ãã»ãŒãã£ãŒã§ãµãŒããŒãµã€ããšã³ãžãã¢ãããŠããéæã§ãã æ¬èšäºã¯ãffmpegãåããŠäœ¿ãæ¹ãã360床ã«ã¡ã©ã®ãã¯ãŒãåŠçã«ã€ããŠåŠã³ããæ¹ã察象ã«ããŠããŸããå°éçãªç¥èã¯äžèŠã§ãã®ã§ããã²ãæ°è»œã«ãèªã¿ãã ããã ã»ãŒãã£ãŒã§ã¯ãå倩çã«ã¡ã©ãªã©ãéçŒã¬ã³ãºãçšããŠåºç¯å²ãæ®åœ±ãã360床ã«ã¡ã©ã®æ åãåãæ±ã£ãŠããŸãããã®ããããã®ãããªã«ã¡ã©ã®ç»åãæ åããã¯ãŒã (æªã¿ãè£æ£ããæªã¿ã®å°ãªãæ åã«å€æããããš) ãããŠãŒã¹ã±ãŒã¹ãååšããŸããä»äºãããéçšã§ãffmpegã®ãããªãã£ã«ã¿ãŒã䜿ã£ã倿ã«ã€ããŠèª¿ã¹ãã®ã§ãã¡ãã§å
±æããããŸãã ã¯ããã« ffmpegãšvfãªãã·ã§ã³ã«ã€ã㊠ãã¯ãŒãã®å
·äœçãªæé ãŸãšã ffmpegãšvfãªãã·ã§ã³ã«ã€ã㊠ffmpegã¯ãåç»ãé³å£°ãèšé²ã»å€æã»åçãããœãããŠã§ã¢ã§æ§ã
ãªåŠçãè¡ãããšãã§ããŸãããã®äžã§ããvfãªãã·ã§ã³(video filter ãªãã·ã§ã³) ã¯ãå
¥åã«å¯Ÿããæ åãæ¡å€§ãããäžéšåãåãåããè²ãè£æ£ãããªã©ã®åŠç(ãã£ã«ã¿ãŒ) ãé©çšããããšãã§ããæ©èœã§ãã ç°¡ç¥åãããšãäžèšã®ãããªã·ã³ã¿ãã¯ã¹ã§ãªãã·ã§ã³ãæå®ããããšãã§ããŸãã -vf <ãã£ã«ã¿å>=<ãã£ã«ã¿ãŒããšã®ãªãã·ã§ã³> (å®éã«ã¯ãã£ãšè€éãªæå®ãå¯èœã§ãã詳现ã¯å
¬åŒãµã€ãããåç
§ãã ããã https://ffmpeg.org/ffmpeg-filters.html) äŸãã°ãcropãã£ã«ã¿ãŒã§ããã°ãäžèšã®ãããªã³ãã³ãã§ç»é¢ã®äžéšãåãåã£ãæ åãäœãããšãã§ããŸãã ffmpeg -i input.mp4 -vf crop=500:500:100:100 output.mp4 vfãªãã·ã§ã³ã®äžã«ã¯ãv360ãã£ã«ã¿ãŒãããã360床ã«ã¡ã©ã§æ®åœ±ãããéçŒãªã©ã®æ åããã¯ãŒããããæ åã«å€æããããšãã§ããŸãã ãã¯ãŒãã®å
·äœçãªæé 360床ã«ã¡ã©ã®æ åãšç°å¢ã®æºå ä»åã¯ãffmpegã³ãã³ãã䜿ã£ã360床ã«ã¡ã©ã®å€æã«ã€ããŠèª¬æããŸãã å©çšããããŒã«ã®ããŒãžã§ã³ã¯äžèšã«ãªããŸãã ffmpegã®ããŒãžã§ã³ã¯7.1.1ã§ãã ãã¯ãŒãã®ããã®ffmpegã³ãã³ãã®èšè¿° ãã¯ãŒãã®ããã®ffmpegã³ãã³ãã®èšè¿° ä»åã¯ãv360ãã£ã«ã¿ãŒã䜿ã£ãŠãå倩çã«ã¡ã©ãªã©ã§æ®åœ±ããããéçŒ (fisheye)ã圢åŒã®æ åãæªã¿ãè£æ£ããæ åã«å€æããŸãã v360ãã£ã«ã¿ãŒã¯äžèšã®ãããªã·ã³ã¿ãã¯ã¹ã§æ§æãããŠãã âv360=<å
¥åã®åœ¢åŒ>:<åºåã®åœ¢åŒ>:<key=valueã§æå®ãããªãã·ã§ã³> ãšãã£ã圢åŒã§æå®ã§ããŸãã äŸãã°ãäžèšã®ã³ãã³ãã§ããã°æå®ãããªãã·ã§ã³ã§ãéçŒ (fisheye) ã®æ åãããã¯ãŒããããéåžžã®æ åã«å€æãããŸãã ffmpeg -i input.mp4 -vf âv360=fisheye:flat:v_fov=50:yaw=50â output.mp4 v360ãã£ã«ã¿ãŒã§ã¯ãäžèšã®ãããªå
¥å/åºåå
ãçšæãããŠããŸãã e / equirect => Equirectangular projection flat / gnomonic / rectilinear => regular video fisheye => éçŒ pannini => Pannini projection. and etc å
¥å/åºå圢åŒããšã«å¿
èŠãªãã©ã¡ãŒã¿ãŒãå€ãããæ§ã
ãªå€æãè¡ãããšãã§ããŸãã v360ã®ãã£ã«ã¿ãŒã§ã¯ãå
±éã§yaw/pitch/roll ãªã©ã®ã«ã¡ã©ã®èŠç¹ãã³ã³ãããŒã«ãããªãã·ã§ã³ããã«ã¡ã©ã®å転ãå¶åŸ¡ãããªãã·ã§ã³ããããŸãã ä»å䜿çšãã flatãã£ã«ã¿ãŒã§ã¯ãç¹ã«ãã¯ãŒãåŸã®èª¿æŽãè¡ããããåºåããã«ã¡ã©ã®ç»è§ã以äžã®ãªãã·ã§ã³ã§å¶åŸ¡ã§ããŸãã v_fov (åçŽç»è§) h_fov (æ°Žå¹³ç»è§) d_fov (察è§ç»è§) ãããã®ãªãã·ã§ã³ãå©çšããããšã§ã倿åŸã®æ åã现ãã調æŽããããšãå¯èœã§ãã ã³ãã³ãã®å®è¡äŸ äŸ1: äžäžã®æ¯ãåã ffmpeg -i input.mp4 -vf v360=fisheye:flat:v_fov=50:pitch=<è§åºŠ> output.mp4 äŸ2: å·Šå³ã®æ¯ãåã ffmpeg -i input.mp4 -vf v360=fisheye:flat:v_fov=50:yaw=<è§åºŠ> out.mp4 äŸ3: å³ã«æ¯ãåããæ åã®å·Šååã ããåãåã ffmpeg -i input.mp4 -vf v360=fisheye:flat:v_fov=50:yaw=30,crop=iw/2:ih:0:0 output.mp4 ãŸãšã ãã®ããã«éçŒã®æ åãªã©360床ã«ã¡ã©ã§æ®åœ±ããæ åã¯ãç°¡åã«ãã¯ãŒãããããšãã§ããŸããç»åãåç»ã®å€æã«åœ¹ç«ãŠãŠããã ããã°å¹žãã§ãã ã»ãŒãã£ãŒã§ã¯ããã®ãããªæ åè§£ææè¡ã掻çšããããé«åºŠãªãµãŒãã¹ãæäŸããŠããŸããèå³ããæã¡ããã ããŸãããããã²æ¡çšæ
å ±ãã芧ãã ããã
ã¯ããã« ããã«ã¡ã¯ãããŒã¿ããªãã³æšé²å®€ã§ããŒã¿ãšã³ãžãã¢ããã£ãŠããé¶Žã§ãïŒ ã¿ãªãããLightdashã®Table calculationæ©èœã£ãŠäœ¿ã£ãŠãŸããïŒ èªåã¯Lightdashãè§Šã£ãŠããŠ[+Table calculation]ãšãã衚èšãèŠãããéã« ãTable calculationã£ãŠããšã¯è¡šèšç®æ©èœã®ããšãã Tableauãšãã«ãããåºåããçµæããŒã¿ã®äžã§éèšããããããã€ã㪠ãããšäŸ¿å©ã ããªâŠãã®ãã¡äœ¿ãæ©äŒããã£ãããã ã¿ãããªããšèããŠããŸãè§Šããã¹ã«ãŒããŠãŸãã⊠åããããªæ¹ãããã£ãããã®ã§ã¯ãªãã§ããããïŒ å®ã¯Lightdashã®Table calculationæ©èœã¯ã¡ãã£ãšé¢çœãæ©èœã«ãªã£ãŠããã®ã§ããã§ã玹ä»ããããšæããŸãïŒ ã¯ããã« Table calculationãè§Šã£ãŠã¿ãã ãã³ãã¬ãŒãæ©èœããããŸã å®ã¯ããã ããããªãã£ãTable calculation æåŸã« We are hiring! Table calculationãè§Šã£ãŠã¿ãã ãŸãã¯Querying from tablesããèŠããããŒãã«ãéžæããResultã®å³äžã«ãã[+Table calculation]ãæŒããŠã¿ããšâŠ ãããªç»é¢ãåºãŠããŸãã ã€ãŸãåºåããããŒã¿ã䜿ã£ãŠSQLãæžããŠéèšããããšããæããªãã§ããã ãã¯ã衚èšç®ãšããã°ãŠã£ã³ããŠé¢æ°ãšããããšã§æžããŠã¿ãŸãïŒ ä»åãµã³ãã«ã§çšæããã¹ãŒããŒããŒã±ããããŒã¿ã§å£²äžåæ¥æ¯ãäœã£ãŠã¿ãŸãã â»æ¬èšäºã«ç»å ŽããããããããŒããã¯ããµã³ãã«ããŒã¿çšã«äœæããæ¶ç©ºã®åç§°ã§ãããå®åšã®ãããªãåºèã»å£äœãšãäžåé¢ä¿ãããŸãã SQLã¯ãããªæãã§ããç·šéç»é¢ã§æåãå
¥åãããšãµãžã§ã¹ãããŠãããã®ã§äŸ¿å©ã§ãã ${sample_supermarket_sales.sum_of_total_price} / LAG(${sample_supermarket_sales.sum_of_total_price} OVER(${sample_supermarket_sales.sale_date_day})) ãã®ããŒã¿ã¯ãœãŒããèšå®ããŠããã®ã§äžæŠORDER BYã¯èšèŒããé²ããŠã¿ãŸãã ãã©ãŒãããã¯ããŒã»ã³ã衚瀺ã«ããŸãããã ä¿åããŠå®è¡ãããšãããªæãã«ãªããŸããïŒ ãŸããã®äœã£ãé
ç®ãçŽæ¥ãã£ã«ã¿ãŒã«èšå®ããããšãã§ããŸãïŒ å³äžã®ãã¿ã³ãæŒããš[Filter by 売äžåæ¥æ¯]ãããã®ã§æŒããŠã¿ããšâŠ ãã£ã«ã¿ãŒæ¬ã«è¿œå ãããŸããïŒ ããã䜿ã£ãŠåæ¥å£²äžæ¯100%è¶ãã®æ¥ãåºããŠã¿ãããªããŠããšãã§ããŸãã ãã³ãã¬ãŒãæ©èœããããŸã ãŠã£ã³ããŠé¢æ°ã¯SQLã«æ
£ããŠããªãæ¹ã ãšæ£çŽé£ããéšåããããŸããã⊠ã§ããLightdashã«ã¯ãã³ãã¬ãŒããçšæãããŠãŸãïŒ [Sum of total price]ã®å³äžã®ãã¿ã³ãæŒããšãAdd quick calculationã«ãã³ãã¬ãŒãããããŸãã Percent change from previous(åããã®å€åç)ãã¯ãªãã¯ããŠã¿ãŸãã é
ç®ãèªåã§äœæãããŸããïŒ äžå¿å
容ã確èªããããé
ç®å³äžãæŒããEdit calcultationãã¯ãªãã¯ããŸãã å
容çã«ã¯å
ã»ã©èªåãäœã£ãã¯ãšãªã®å
容ã«è¿ãããžãã¯ããããããã«å¯ŸããŠ1ãåŒããŠãã圢ã«ãªããŸãã ãªããæ³šæããŠæ¬²ããã®ãLAG颿°ã®ORDER BYã®ç®æãDESCã«ãªã£ãŠããŸãã æ¥ä»ã§æé ã«ãããããããã¯æ¶ããŠãããŸãããã ããã¯èŠãããã®ã«ãããšæãã®ã§é©å®èª¿æŽããŠãã ããïŒ å®è¡ããçµæã¯ãããªããŸãããæ£çŽãã£ã¡ã®æ¹ãããããããã§ããïŒw ãã®ããã«ãã³ãã¬ãŒããããŸã䜿ããšãµã¯ããšäœããŸãã ä»ã«ããã³ãã¬ãŒãã¯ããã®ã§ãã²å
¬åŒããã¥ã¡ã³ã㮠解説ããŒãž ãã確èªãã ããã ãŸãä»ã®æä»£ã¯ChatGPTå
çãGeminiå
çãªã©ã«èãã°ããããããæããŠãããŸãããäœã£ãŠãããŸããæå¹ã«æŽ»çšããŠãããŸãããïŒ å®ã¯ããã ããããªãã£ãTable calculation ããŠããããŸã§è§Šã£ãŠããTable calculationã§ããå¯ãã®è¯ãæ¹ã¯ãã®ããšã«æ°ã¥ããŠãããããããŸãã⊠ãSQLã§æžããã£ãŠããšã¯SQLã§ãããããšã¯å²ãšäœã§ãã§ããã®ã§ã¯âŠïŒ ããã§ããäœã§ãã§ããŸãã ããšãã°ãã®ãããªCASEæãæžããŠããããã©ã°ãç«ãŠãããšãã§ããŸã(Result typeã¯booleanã«ããŠãŸã) ã¹ãã¢ãšååã®æååãçµåãããããªããã¹ãèšç®ãã§ããŸã(Result typeã¯stringã«ããŠãŸã) ãªããèªåãæã£ãŠã衚èšç®ãšéãâŠïŒïŒïŒïŒ éèšããé
ç®ãããã«å¥œããªããã«ããŒã¿å å·¥ã»èšç®ã§ããã®ã§é¢çœããšæããŸãã ãŸãå°ãåã® Lightdashã¢ããããŒã ã§äœæãã衚èšç®é
ç®ãåå©çšã§ããããã«ãªããŸããã ã€ãŸããããã£ãŠå
ã»ã©äœæããããããã©ã°ãšã¹ãã¢ãšååã®é
ç®ãåãããããšãå¯èœã§ãã äœæãã衚èšç®çµæãããã«èšç®ããŠâŠã¿ããã«åºããŠãããã®ã§æè»æ§ãäžãã£ãŠããã§ããïŒ æåŸã« Table calculationã¯å®çŸ©ãããã¡ããªãã¯ã§å¯Ÿå¿ã§ããªãã£ãéèšãããŒã¿å å·¥ãã«ããŒããæ©èœãšãªã£ãŠããŠå©çšãããæ¹ã¯ããããæ©èœããããšèªèãããŠãããæ¹ãè¯ãæ©èœã ãšæããŸãïŒ ãã å
¬åŒããã¥ã¡ã³ãã«ã èšèŒ ããããŸãããã®Table calculationã¯äžæçãªããŒãºã«å¯Ÿå¿ãããã®ãšããŠã¯è¯ãæ©èœã§ãããç¹°ãè¿ãåå©çšãããŠããå Žåã¯dbtåŽã®å®çŸ©ã«è¿œå ããŠç®¡çããããã«ããæ¹ãè¯ãã®ã§ç®¡çè
ã¯é©å®ãã§ãã¯ããŠãããŸãããã We are hiring! çŸåšãããŒã¿ããªãã³æšé²å®€ã§ã¯ ããŒã¿ãšã³ãžãã¢/ã¢ããªãã£ã¯ã¹ãšã³ãžãã¢ã倧åéäž ã§ãïŒ ã»ãŒãã£ãŒã®ããã€ã¹ãã¢ããªã±ãŒã·ã§ã³ããã¯1æ¥ãããæ°ååä»¶ã®ãã°ãçºçããããŒã¿éã¯ç·åœ¢çã«å¢å ããŠããŸãã ãã®ãããªè¶
ããã°ããŒã¿ãå¹ççã«åŠçããããžãã¹ã®æææ±ºå®ã«ç¹ããããã®ä»çµã¿ãäžç·ã«äœã£ãŠã¿ãŸãããïŒ ãèå³ã®ããæ¹ã¯ ã»ãŒãã£ãŒæ¡çšãµã€ã ãèŠããŠã¿ãŠäžããïŒ ããLightdash Lifeããããã§ã¯ãŸãïŒ
ããã«ã¡ã¯ïŒã»ãŒãã£ãŒã§ããŒããŠã§ã¢éçºãæ
åœããŠããæäžžã§ãã ãåãã®éãããã»ãŒãã£ãŒãã¯ã¯ã©ãŠãé²ç»ãµãŒãã¹ããœãããŠã§ã¢ãäºæ¥ã®äžæ žãšããäŒç€Ÿã§ãã ãããŠåœç¶ã®ããã«ãã¯ã©ãŠãããœãããŠã§ã¢ã®æè¡ãããŒã¹ãšãããšã³ãžãã¢ã®å²åãå€ãäŒç€Ÿã«ãªããŸãã ããããã客æ§ã«æé«ã®äœéšããå±ãããããã«ã¯ãæ åã®å
¥ãå£ãšãªãã«ã¡ã©ãã¯ãããšãããããŒããŠã§ã¢ãã®ååšãæ¬ ãããŸããã 仿¥ã¯ãæ®æ®µããŸãèªãããããšã®ãªããã»ãŒãã£ãŒã®ããŒããŠã§ã¢ãžã®ç±ãæ³ããšããã®åè³ªãæ¯ããåãçµã¿ã«ã€ããŠã玹ä»ããããšæããŸãã ãã¹ãŠã¯ãã客æ§ã«å¯ãæ·»ããããã« ããã ä»å
¥ãããã ãã§ã¯çµãããªããã»ãŒãã£ãŒã®è£œåè©äŸ¡ ä»çµã¿ã§æ¯ããå質ã補åè©äŸ¡ããã»ã¹ã®æšæºå äžå
·åè§£æãããè
ã®èŠãã©ãã ãããã« ãã¹ãŠã¯ãã客æ§ã«å¯ãæ·»ããããã« ç§ãã¡ããŒããŠã§ã¢æ
åœãæã倧åã«ããŠããã®ã¯ã ãã客æ§ã«å¯ãæ·»ã£ã補åïŒããŒããŠã§ã¢ïŒãæäŸããŠããã ãšããããšãŠãã·ã³ãã«ãªæ¹éã§ãã ã客æ§ãã©ã®ãããªã·ãŒã³ã§ãã©ã®ãããªèª²é¡ã解決ãããã®ãã ãããæ·±ãçè§£ããæ©èœãæ§èœã¯ãã¡ããã®ããšãé·æã«ããã£ãŠå®å¿ããŠäœ¿ããå質ããããŠå®å
šæ§ãå
Œãåãã補åããå±ãããããšã ãããç§ãã¡ã®äœ¿åœã§ãã ã»ãŒãã£ãŒãæäŸããããŒããŠã§ã¢è£œåã«ã¯ãä»ç€Ÿãã賌å
¥ãã補åïŒäžéšãã»ãŒãã£ãŒåãã«ã«ã¹ã¿ãã€ãºãããã®ãå«ãïŒãšãèªç€Ÿã§éçºãã補åã®2çš®é¡ããããŸãã ä»åã¯ãç¹ã«ä»ç€Ÿè£œåãã客æ§ã«ãå±ãããéã®ãç§ãã¡ã®ãã ããã«ã€ããŠã話ãããŸãã ããã ä»å
¥ãããã ãã§ã¯çµãããªããã»ãŒãã£ãŒã®è£œåè©äŸ¡ ä»ç€Ÿè£œåãéžå®ããäžã§ãç§ãã¡ã¯ç¹ã«ä»¥äžã®2ã€ã®ããã»ã¹ã«å€ãã®æéãè²»ãããŠããŸãã ã客æ§ã®å©çšã·ãŒã³ã®ææ¡ãšçè§£ æäŸãã補åã®èšèšææ³ã®èªã¿åã Fig1 ãªããªãããã®2ã€ã®ã¹ããããçãã«ãããšããæã蟌ã¿ãã«ãã£ãŠåŸã
倧ããªåé¡ãåŒãèµ·ãããããªãããã§ãã ãæ®éã¯ããã®ã¯ãã ããšãã£ãæã蟌ã¿ãæé€ããã客æ§ã®æ¬åœã®ããŒãºãšè£œåã®ç¹æ§ãæ£ç¢ºã«çµã³ã€ããã ãããŠãé¢ä¿è
å
šå¡ããã®å
±éçè§£ã®äžã«ç«ã€ããšãããããžã§ã¯ãæåã®éµãæ¡ã£ãŠããŸãã ãã®èãæ¹ã«åºã¥ããç§ãã¡ã¯ä»¥äžã®ãããªã¹ãããã§è£œåã®è©äŸ¡ãé²ããŠããŸãã ã客æ§ã®èŠæ±å
容ãæç¢ºã«ããææžåããïŒãŠãŒã¶ãŒæ
å ±ïŒ éžæãã補åã®ä»æ§ïŒæ©èœãæ§èœãå質ãªã©ïŒãã客æ§ã®èŠæ±ãæºãããŠãããã確èªããïŒè£œåæ
å ±ïŒ ã«ã¿ãã°ã¹ããã¯ã ãã§ã¯ç¢ºèªã§ããªãé
ç®ãæŽãåºããè©äŸ¡ã»æ€èšŒã宿œããïŒè¿œå è©äŸ¡ïŒ Fig2 ä»çµã¿ã§æ¯ããå質ã補åè©äŸ¡ããã»ã¹ã®æšæºå ãèšãã¯æããè¡ãã¯é£ããã§ããããããã®è£œåè©äŸ¡ããã»ã¹ãæ
åœè
ã®ã¹ãã«ãçµéšã ãã«äŸåããŠããŸããšãå質ã«ã°ãã€ããçãŸããŠããŸããŸãã ããã§ç§ãã¡ã¯ã誰ãæ
åœããŠãäžå®ã®å質ãæ
ä¿ã§ããããã«ãè©äŸ¡ããã»ã¹ãåè¿°ã®ããã«æšæºåããå°çšã®å
¥åãã©ãŒã ïŒäžèšåç
§ïŒãæé æžãæŽåããŠããŸãã å©çšã·ãŒã³ã®ææ¡: 補åèšçœ®èŠä»¶ç¢ºèªã·ãŒã 補åã®èšèšã»å®å
šææ³ã®ææ¡: èšçœ®ã¬ã€ãã®ç¢ºèªã·ãŒãã補åèªèšŒã®ç¢ºèªã·ãŒã è£œåæ§èœã»å質ã®ç¢ºèª: è£œåæ§èœã®ç¢ºèªã·ãŒãã補åå質ã®ç¢ºèªã·ãŒã Fig3 ããã«ããœãããŠã§ã¢ãšã³ãžãã¢ãå€ãåšç±ããã»ãŒãã£ãŒã®ç¹æ§ãèžãŸããåã·ãŒãã®å
¥åæ¹æ³ã泚æç¹ããŸãšããæé æžãæºåããŸããã ããã¯ãæ®æ®µããèšçœ®æ¥åãéšæã«è§ŠããŠããæ
åœã§ããã°çšèªã«ã粟éããŠããŸãããã©ãã«ã©ããã£ãæ
å ±ãããããããããããŸãã ããããé »åºŠã®äœã人ãäœæ¥ãå§ããããšãããšãæãã®ã»ãæéãããã£ãããããŸãããã®ãããªèæ¯ã«å¯Ÿå¿ããããã®æé æžãäœæããŠããŸãã Fig4 ããããçšããããšã«ãããããŒããŠã§ã¢ã®å°éå®¶ã§ãªããŠããã¹ã ãŒãºãã€ç¶²çŸ
çã«æ€èšŒãé²ããããç°å¢ãæŽããŠããŸãã å ããŠã䜿çšäžã®æ³šæãå®å
šäžã®æ³šæãèªèšŒåæãšãã£ãæèšãçšèªã衚çŸãå瀟ã§å¹
åºãåçŽãªæ€çŽ¢ã§ã¯ãããããªããã®ã«ã¯çæAIãçšããããšãæ³å®ãã察象é
ç®ã調æ»ã§ããããã«ããŒãã¬ãŒãºã䜵èšããŠããŸãã å€ãã®äººã宿ããŠããéããçæAIã«ãã調æ»ã®ã¡ãªããã¯ãç¶²çŸ
çãªæœåºãã§ããããšã«ããã調æ»ç¯å²ãäžååãªããšã«ããæããæŒãã®çºçãé²ãããšãã§ããŸãã ããããªããã調æ»è
ã®çµéšã»ç¥èãå°ãªãå Žåã«ã¯ãçæAIã«å
¥åãããã¬ãŒãºãååã§ãªãããã®ã¡ãªãããååã«äº«åã§ããªãã±ãŒã¹ã®çºçããããŸãã ãããããããã¬ãŒãºäŸã䜵èšããåºåçµæãéå®ãããããªãããã«ããŠããŸãã Fig5 äžå
·åè§£æãããè
ã®èŠãã©ãã ãã®ããã«ç¢ºèªãè¡ã£ã補åã§ãã£ãŠã販売åŸã«ãæ®å¿µãªããäœããã®äžå
·åãçºçããããšããããŸãããããªæãããç§ãã¡ããŒããŠã§ã¢æ
åœã®è
ã®èŠãã©ããã§ãã è§£æã®é²ãæ¹ã§äžçªãããã¡ãªããšã¯ãã€ãçµéšãšåã«é Œã£ãŠè§£æãé²ããŠããŸãããšã§ãã åœããã°ããã®ã§ãããåœãŠãå€ãããšåå ç©¶æãå°é£ã«ãªãããšãå€ã
ãããŸãã æã
ã¯è£œé ã¡ãŒã«ãŒã§ã¯ãªãã倧éã«äžã®äžã«è£œåãåºè·ããŠããããã§ã¯ãªãã®ã§ãè§£æãã§ããäžå
·å察象æ©ãæ°å°çšåºŠã§ããããšãåžžã§ãã æ
éã«ããšãé²ããããšãéèŠã«ãªããŸãã ãã®ãããªããšãèžãŸããªãããçµéšè±å¯ãªãšã³ãžãã¢ããããã§ãªãã¡ã³ããŒããåãæ
å ±ãæ®ããªããè§£æãé²ãããããããäœç³»çãªäžå
·åè§£æãããŒãæ§ç¯ããŠããŸãã äžå
·åå ±åã®ç¢ºèªïŒäžå
·åå ±å確èªã·ãŒãïŒ äžå
·ååã®å€èгïŒå€èŠ³ç¢ºèªå ±åã·ãŒãïŒ äžå
·ååçŸïŒåçŸç¢ºèªå ±åã·ãŒãïŒ äžå
·ååã®åè§£ïŒå解確èªå ±åã·ãŒãïŒ äžå
·ååã®è§£æïŒè§£æå ±åã·ãŒãïŒ åã·ãŒãã«ã¯ãHWãšã³ãžãã¢ã®çµéšããŠãã確èªé
ç®ããªã¹ãããããã®å
容ãé æ¬¡ãã§ãã¯ããŠããã€ããã«ãªã£ãŠããŸãã ããã«ãããåŸæ»ãã®ãªããç確ãªåå ç©¶æãšãåçºé²æ¢ã«ç¹ããŠããŸãã Fig6 ãããã« ä»åã¯ãã»ãŒãã£ãŒã®ããŒããŠã§ã¢ãžã®åãçµã¿ãç¹ã«ä»ç€Ÿè£œåãè©äŸ¡ããéã®ããã»ã¹åã³äžå
·åè§£æã«ã€ããŠã玹ä»ããŸããã ããã¯ã HWãšã³ãžãã¢ãæ±ããã»ãŒãã£ãŒã ããããã®ã¢ãããŒãã§ã ã ç§ãã¡ã®ç®æšã¯ããã® HWãšã³ãžãã¢ã®çµéšãèŠèã«è£æã¡ãããä»çµã¿ ãããã«é²åãããHWãšã³ãžãã¢ä»¥å€ã®ã¡ã³ããŒãå«ããå
šäœã®åºäžããããããšã§ã客æ§ã«å質ã®é«ãããŒããŠã§ã¢ãå±ããããããã«ããããšã§ãã æ¬¡åã¯ãããäžã€ã®æ±ã§ãããèªç€Ÿéçºè£œåãã«ã€ããŠã詳ããã話ãããããšæããŸãã®ã§ããæ¥œãã¿ã«ïŒ
ããã«ã¡ã¯ãã»ãŒãã£ãŒæ ªåŒäŒç€Ÿãšã³ãžãã¢ã®äŒè€ã§ãã ä»åã®ã話ã¯ãåç»é
ä¿¡ãµãŒãã¹ãéçºã»éå¶ãããŠããçããŸãž ãUI/UXã ã«ã€ããŠã®ãé¡ãã§ããåé ããããªã察象ãçµã£ãå
å®¹ã«æãããããããããŸãããããã£ãšå€ãã®æ¹ã«ãå
±æããŠããã ããéšåããããšæããŸãã ã©ããæ°è»œã«ãèªã¿ããã ããã°å¹žãã§ãã ãŸã㯠ãã¡ã ãã芧ãã ãããïŒâ»é³ãåºãŸãïŒ â» iOS ã§ã¯äžæã衚瀺ãããªãäžå
·åããããŸããåäœç°å¢ã¯ PC ããã¹ã¹ã¡ã§ãã åç»èŠãªããå¯èœã¡åé¡ ã·ãŒã¯ããŒã®ãã©ã€ãšãã çæ³ã®ã·ãŒã¯ããŒã®ææ¡ ãŸãšã ããŸãïŒã·ãŒã¯ããŒã®äœãæ¹ïŒ ã¹ãããïŒ èšèšå³ãæžã ã¹ãããïŒ åº§æšå€æ ã¹ãããïŒ æç» ã¹ãããïŒ åçäœçœ®ã®ç§»å & ã¹ã±ãŒã«å€æ ãŸãšã åç»èŠãªããå¯èœã¡åé¡ ããŠãçããã¯ãåç»é
ä¿¡ãµãŒãã¹ããå©çšããŠããŸããïŒ YouTubeãNetflixãAmazonãã©ã€ã ã»ãããªãä»ã«ãæ°ããããªãã»ã©ã®ãµãŒãã¹ãä¹±ç«ããŠããŸãããçŸä»£äººãªãäœãããäžã€ã¯äœ¿ã£ãŠããã®ã§ã¯ãªãã§ãããããäžã«ã¯ãããã€ãã®ãµãŒãã¹ã«å å
¥ããŠãæ¯æ©ã€ãã€ã倿ŽããããŠããŸã£ãããäŒæ¥ã¯æããæ©ãŸã§åç»æŒ¬ããããªããŠæ¹ãããã£ããããããããŸããããããèšãç§ãããããªåç»æŒ¬ãã®æ¯æ¥ãéã£ãŠããäžäººã§ãã ãããŠä»åã¯ããããªç掻ã®äžã§ã©ãããŠãæ°ã«ãªã âããUIâ ã«ã€ããŠãäžèšç©ç³ããããšæããŸãã ãã㯠ãã·ãŒã¯ããŒã ã§ãã ç§ã¯æ®æ®µãå¯ããã³ãªããã¹ããã§åç»ãèŠãããšãå€ãã®ã§ãããã€ãã€ã å¯èœã¡ ããŠããŸãããšããããŸããæ°ã¥ãã°åç»ã¯åçãçµãã£ãŠããŠããããïŒã©ããŸã§èŠããã ã£ãïŒããšãåŸããèŠè¿ãããšããã®ã§ãããããã§å°ãã®ãã·ãŒã¯ããŒã§ããåç»ã®ç·åçæéã«å¯ŸããŠãã·ãŒã¯ããŒã®è¡šç€ºãããŸãã«ãçããæã§æ£ç¢ºã«å¯èœã¡ããäœçœ®ãŸã§ç§»åããã®ããšãŠãé£ããã®ã§ãã ã·ãŒã¯ããŒã®ãã©ã€ãšãã ããããããããã£ãŠæ¬åœã«ãããªã«é£ããã®ïŒããšãã³ãšããªãæ¹ããããããããŸãããããã§ãã©ããããæäœãé£ããã®ããå®éçã«æ€èšŒããŠã¿ãŸãããã ãŸããã·ãŒã¯ããŒã®ç©ççãªé·ãã§ãããã¹ãããæšªåãã«ãããšãã®ç»é¢å¹
ã«äŸåããŸãã端æ«ã«ãã£ãŠéãã¯ãããã®ã®ã倧ããã®ã¹ããã§ãç»é¢ã®æšªå¹
ã¯ãããã 150mm çšåºŠã§ããïŒã¡ãªã¿ã«ãç§ã䜿ã£ãŠããã¹ãã㯠110mm ã§ããïŒ ãã ããããã¯ç»é¢å
šäœã®å¹
ãå®éã®ã·ãŒã¯ããŒã«ã¯å·Šå³ã«ããŒãžã³ïŒäœçœïŒããããããããŒèªäœã®æå¹ãªé·ãã¯ããå°ãçããªããŸããããã§ã¯ä»®ã«ãã·ãŒã¯ããŒã®é·ãã 140mm ãšããŠã¿ãŸãããããã®ç¶æ
ã§ 2æéïŒ= 7,200ç§ïŒã®æ ç»ãèŠãŠãããšãããšã 1mm ãããã®æé ïŒ 7,200ç§ Ã· 140mm â 50 ç§/mm ããã«ãæã®è
¹ã®å€ªãã¯ã ããã 15mm ããããããŸããããã€ãŸãã æå
1 æ¬åã«çŽ 12 å ïŒïŒ50ç§ Ã 15mmïŒã®æ åãå§çž®ãããŠããããã§ãã ãã®ç¶æ
ã§ãããš5ç§æ»ãããããšæã£ãŠãã1mm以äžã®ç¹çŽ°ãªæäœãæ±ããããŸãããŸãã§ãç±³ã«åãæžããããªãã®ã§ãããããããèŠåŽããŠã·ãŒã¯ããŒã埮調æŽãããšããã§ãåç»ãåçããããŸã§ã¯ãã©ã®å Žé¢ããå§ãŸãã®ãåãããŸãããããã®ã·ãŒã³ã¯ãŸã æèããã£ããªãããã£ãã¡ãã£ãšè¡ããããããããªããšãèããªãããã¹ã¯ãªãŒã³ãäœåºŠãæã§ã¹ãªã¹ãªããããŠãè¡ããããŠã¯æ»ããæ»ããããŠã¯é²ãããããããŠã埮調æŽãäœåºŠãç¹°ãè¿ã矜ç®ã«ãªãã®ã§ãã çæ³ã®ã·ãŒã¯ããŒã®ææ¡ ããã§åé ã®åç»ã®æ°ããã·ãŒã¯ããŒã®ææ¡ã§ããå瀟ã®åç»é
ä¿¡ãµãŒãã¹ã§ãã²æ¡çšããŠããã ãããã çæ³ã®ã·ãŒã¯ã㌠ãèªåãªãã«å®è£
ããŠã¿ãŸããã 工倫ãããã€ã³ãã¯ãäž»ã«ä»¥äžã®2ã€ã§ãã ïŒ. ã·ãŒã¯ããŒã®ã¹ã±ãŒã«ãæ¡å€§ã»çž®å°ã§ãã åçäœçœ®ã®æå®ã¯ãããŠã¹ãªããã©ãã°æäœã§ãã¹ãããªãã¿ããæäœã§è¡ããŸããããèªäœã¯äžè¬çãªæäœã§ãããããã« ã¹ã±ãŒãªã³ã°æ©èœ ãå ããŸããã ããŠã¹ãã€ãŒã«ã§æ¡å€§ã»çž®å°ïŒã¹ããã®å Žåã¯ãã³ãã€ã³ã»ãã³ãã¢ãŠãïŒ ã¹ã±ãŒã«ã倧ããããã°ããã£ããå
šäœãæ©éãã»å·»ãæ»ã ã¹ã±ãŒã«ãå°ããããã°ãç§åäœã§ã®åŸ®èª¿æŽãã¹ãã¬ã¹ããªãŒ ããŸã倧ãŸãã«æ¢ã â 现ãã調æŽããã ãšããåäœããã¹ã ãŒãºã«å®çµã§ããã®ã§ãã ïŒ. åç»ã®ãµã ãã€ã«ã衚瀺ããŠèŠèŠçã«æ€çŽ¢ã§ãã ã·ãŒã¯ããŒã®äžã« åç»ã®ãµã ãã€ã«ã衚瀺ãã æ©èœãå ããŸãããããã¯æè¿ã®ãã¬ã€ã€ãŒã«ãããèŠãããæ©èœã§ãããä»åã®ææ¡ã§ã¯ã¹ã±ãŒã«æ¡å€§ã»çž®å°ãšçµã¿åãããŠäœ¿ããã®ããã€ã³ãã§ãã æ¡å€§æã«ã¯ãååŸã®ãã¬ãŒã ãèŠèªã§ããããã«ããã·ãŒã³ã®åãæ¿ãããã²ãšç®ã§ææ¡ã§ãã ãã©ãã§å¯èœã¡ãããããèŠèŠçã«æ¢ãããããªã ãã®2ç¹ãçµã¿åãããããšã§ãããã®å Žé¢ãæ¢ãããã®ã«èŠã€ãããªãããšããããã®ãã©ãããããè§£æŸãããã®ã§ã¯ãªãããšèããŠããŸãïŒ ãŸãšã 以äžãçŸå Žããã®ãé¡ãã§ããïŒ ã¡ãªã¿ã«åé ã®ãã¢ã®ãµã ãã€ã«éšåã®æç»ã«ã¯ããã©ãŠã¶ã«ããããè² è·ãããã£ãŠããããã§ãäžæãåäœããªãããšããããŸããç¹ã« iOS ã§ã¯ãµã ãã€ã«ãäžæã衚瀺ãããªãäžå
·åãèŠã€ãã£ãŠããŸããåäœç°å¢ã¯ PC ããã¹ã¹ã¡ã§ãã ãŸãä»åäœã£ãã·ãŒã¯ããŒãã奜ããªåç»ã§ã詊ãããã ããããã«ã ãæå
ã®åç»ãã¡ã€ã«ãèªã¿èŸŒããããŒãžã§ã³ ãçšæããŸãããè¯ããã°ãã¡ãã䜿ã£ãŠã¿ãŠãã ããã åç»é
ä¿¡ãµãŒãã¹ãæãããçããŸãã©ãããã®å¯èœã¡ãŠãŒã¶ãŒã®å£°ã«è³ãåŸããŠããã ããã°å¹žãã§ãïŒ ããŸãïŒã·ãŒã¯ããŒã®äœãæ¹ïŒ ããããã¯ãšã³ãžãã¢åãã®ã話ãã«ãªããŸãããã£ãããªã®ã§ãã¹ã±ãŒã«ãèªç±ã«å€æŽã§ããã·ãŒã¯ããŒã®å®è£
æ¹æ³ã«ã€ããŠè§£èª¬ããããšæããŸãã åé ã®åç»ãµã³ãã«ã§ã¯ããµã ãã€ã«è¡šç€ºãªã©ã®æ©èœãå«ããŠãããããã³ãŒããå°ãè€éã«ãªã£ãŠããŸããããã§ãä»åã¯ã·ãŒã¯æ©èœã«éå®ããã·ã³ãã«ãª ã㢠ãçšæããŸããããã¡ãã®ã³ãŒããããŒã¹ã«ããŠãå
·äœçãªå®è£
ãã€ã³ããä»çµã¿ããããããã説æããŠãããããšæããŸãããœãŒã¹ã³ãŒã㯠ãã¡ã ã§ãã å®è£
æ¹æ³ã¯ããã€ãèããããŸãããä»åã¯Webã¢ããªãšããŠã®éçºãšããããšã§ã Canvas API ã䜿ã£ãŠå®è£
ããŸãããCanvas API ã¯æšæºçãªæç»åŠçã®ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŠãããã¢ãã€ã«ãªã©ä»ã®ãã©ãããã©ãŒã ã§ã䌌ããããªæ©èœãã©ã€ãã©ãªãããã®ã§ãæ¯èŒçç°¡åã«ç§»æ€ãå¯èœã ãšæããŸãã ã¹ãããïŒ èšèšå³ãæžã ãŸãã¯ãã¶ã€ã³ã決ããŠããã®èšèšå³ãæããŸããããCanvas API ã§ã¯ç¹ãç·ãé·æ¹åœ¢ãšãã£ãåºæ¬çãªå³åœ¢ã®ã»ããããã¹ããç»åãæç»ã§ããŸãããã©ããªGUIãäœãã«ããŠãããŸã㯠æããããã®ã现ããªèŠçŽ ã«åè§£ãã ããšã倧åã§ãã ãµã³ãã«ã¯äžå³ã®ãããªãã¶ã€ã³ã«ãªã£ãŠããŸãããããèŠããšç·ãšé·æ¹åœ¢ããããŠããã¹ãã§æ§æãããŠããããšãåãããšæããŸãã ãã¡ãã«çްãã寞æ³ãèšå
¥ããŠãããŸãã 寞æ³ã®åãæ¹ã¯ã»ã³ã¹æ¬¡ç¬¬ã§èªç±ã«æ±ºããŠããã ããŠæ§ããŸãããã ãã®ãããªãã©ã¡ãŒã¿ã倿°ãšããŠãŸãšããŠãã ãšãããšãããã¶ã€ã³ã調æŽãããšãã«ãšãŠã䟿å©ã§ãã const SEEKBAR_POS_Y = 60 ; const SEEKBAR_HEIGHT = 15 ; const SCALE_LINE_HEIGHT = 8 ; const SCALE_TIME_TEXT_SIZE = 16 ; const CURRENT_TIME_TEXT_SIZE = 28 ; const HEIGHT = 120 ; ã¹ãããïŒ åº§æšå€æ ç¶ããŠãã·ãŒã¯ããŒã®æç»ã«å¿
èŠãªç¥èãã€ã³ãããããŠãããŸãããã ã·ãŒã¯ããŒã®æšªæ¹åã¯ãåç»ã®æéã®çµéã衚ããŠããŸããããã§ãåç»ã®æéãšç»é¢äžã®æç»äœçœ®ãçµã³ã€ããããã«ã ã座æšå€æã ãšããèãæ¹ã圹ç«ã¡ãŸããèãæ
£ããªãèšèãããããŸããããå®ã¯äžåŠçã®ãšãã«ç¿ã£ã äžæ¬¡é¢æ° ã®èãæ¹ãšã»ãŒåããã®ã§ãã ä»åäœã£ããã®ã¯ããŸãå³ã®ããã«åç»å
šäœããããã®äžéšãåãåã£ãèµ€æ ã®éšåãç»é¢äžã«æç»ããŠããŸãããã®ããã«èãããšã ãåç»ã®æé軞ããšãç»é¢ã®åº§æšè»žã ãšããã2ã€ã®ç°ãªã座æšè»žãååšããŠããããšã«ãªããŸãã ããã§ãåç»ã®æå»ã ãç»é¢ã®æ°Žå¹³æ¹åã®äœçœ®ã ãšããŸããããã«ã ç»é¢ã®å·Šç«¯ã®äœçœ®ã«å¯Ÿå¿ããæéïŒ ç»é¢1ãã¯ã»ã«ãããã®æéå¹
ïŒ ãšãããšã次ã®ãããªå€æåŒãæãç«ã¡ãŸãã ãã¡ãã®åŒã ãã§ã¯ãæé軞ãšç»é¢åº§æšè»žã®å€æãå
·äœçã«ã€ã¡ãŒãžãã¥ãããšæãã®ã§ãäžèšã®ããã«å€ãå®çŸ©ããŠããã®é¢ä¿ãå³ç€ºããŠã¿ãŸãã ç»é¢ã®å¹
ïŒ çŸåšæå»ïŒ ç»é¢ã®å³ç«¯ã®äœçœ®ã«å¯Ÿå¿ããæéïŒ åç»ã®é·ãïŒ å³ã®äžåŽã®éè²ã®çŽç·ãæé軞ã§ãäžåŽã®ãªã¬ã³ãžè²ã®çŽç·ãç»é¢åº§æšè»žã«ãªããŸããã°ã©ãã«ãããšæ¬¡ã«ãããªçŽç·ïŒäžæ¬¡é¢æ°ïŒã§ãã ãã®çŽç·ã®åŒã®å®æ°é
ã§ãã ãå€åããããšãæé軞äžã§åãåãç¯å²ãå€ãããŸãããã®çµæãç»é¢äžã§ã¯ã·ãŒã¯ããŒã®è¡šç€ºäœçœ®ãå·Šå³ã«ç§»åãããŸãã§æéãåããŠããããã«èŠããã®ã§ãã ãŸããçŽç·ã®åŸãã衚ã ã®å€ãå€ãããšãç»é¢äžã§åãåºãããæéã®ç¯å²ãå€ãããŸããããã«ãããã·ãŒã¯ããŒã®ã¹ã±ãŒã«ãæ¡å€§ã»çž®å°ããããããªèŠãç®ã«ãªããŸãã ã¡ãªã¿ã«ä»åã®ãã¶ã€ã³ã§ã¯ãç»é¢ã®äžå€®ã®äœçœ®ãçŸåšæå» ( ) ããããããŠããã®ã§ã ã¯çŸåšæå»ããç»é¢å¹
ã®åå ( )ã®æéãå·®ãåŒããå€ãšãªããæ¬¡ã®ããã«è¡šããŸãã ãšããããã§ãåç»ã®åãåºãäœçœ®ãå¶åŸ¡ããããã®å€æ°ãšããŠçŸåšæå» ( ) ãã¹ã±ãŒã«ãå¶åŸ¡ããããã®å€æ°ãšããŠïŒãã¯ã»ã«åœããã®æé( ) ããã® 2 ã€ãä¿æããŠããã°ååã§ãã // çŸåšã®æå» currentTimeMs = 0 ; // 1ãã¯ã»ã«ãããã®æéïŒããªç§ïŒ timeMsPerPix = 2400 ; å
ã®å€æåŒã« ã代å
¥ããŠæ¶ããšãçŸåšæå» ( ) ãš1 ãã¯ã»ã«åœããæéå¹
( ) ãçšããåŒã«æŽçã§ããŸãã ããããããã«å€åœ¢ã㊠ã€ã³ãŒã«ã®åœ¢ã«ãããšãæé軞äžã®åº§æš ãç»é¢äžã®åº§æš ã«å€æã§ããŸãã ããããåç»ã®æé軞ãšç»é¢ã®åº§æšè»žãè¡ãæ¥ããããã®å€æåŒã«ãªããŸããæç»äœçœ®ã®èšç®ã®ããã«é »ç¹ã«å©çšããã®ã§ 颿°å ããŠãããŸãã pix2time ( pix ) { const startTimeMs = this. currentTimeMs - this. canvas . width / 2 * this. timeMsPerPix ; return pix * this. timeMsPerPix + startTimeMs ; } time2pix ( timeMs ) { const startTimeMs = this. currentTimeMs - this. canvas . width / 2 * this. timeMsPerPix ; return ( timeMs - startTimeMs ) / this. timeMsPerPix } ã¹ãããïŒ æç» ããŠãæºåãæŽã£ãã®ã§ãããããæç»æ¹æ³ã«ã€ããŠè§£èª¬ããŠãããŸãã æç»ã«çšãã Canvas API ã®å©ç𿹿³ã¯ããã§è©³ãã解説ã¯ããŸããããé·æ¹åœ¢ãšããã¹ãã®æç»ããçšããªãã®ã§ãäžèšã®ïŒç¹ã ãéã«çè§£ããŠããã°ãªãã±ã€ã§ãã é·æ¹åœ¢ã®æç» (fillRect) ããã¹ãã®æç» (fillText) æç»åŠç㯠draw() 颿° ã®äžã«ãŸãšããããŠããŸãããå°ãé·ãã®ã§æ®µéçã«èŠãŠãããŸãããã èæ¯ã®æç» ãŸãã¯èæ¯ã®æç»ãããããã§ã¯ããã£ã³ãã¹å
šäœãæå®ããè²ã§å¡ãã€ã¶ããŠããŸããã€ãŸãããã®æç¹ã§ã¯èæ¯ãçã£çœã«ãªã£ãŠããã ãã§ãã ctx . fillStyle = SEEKBAR_BACKGROUND_COLOR ; ctx . fillRect ( 0 , 0 , this. canvas . width , this. canvas . height ) ; ã·ãŒã¯ããŒæ¬äœã®æç» 次ã«ã·ãŒã¯ããŒæ¬äœãæç»ããŸããããŒã®èæ¯ã¯ç»é¢ã®æšªå¹
ãã£ã±ãã«é·æ¹åœ¢ãæãã ãã§ãããã®åŸã«åç»ã³ã³ãã³ããååšããéšåãç·è²ã§å¡ãåããŸãã // ã·ãŒã¯ããŒã®èæ¯æç» ctx . fillStyle = SEEKBAR_BLANK_COLOR ; ctx . fillRect ( 0 , SEEKBAR_POS_Y , this. canvas . width , SEEKBAR_HEIGHT ) ; // ã·ãŒã¯ããŒã®åç»ã³ã³ãã³ããããéšåãæç» const dataStartPosX = this. time2pix ( 0 ) ; const dataEndPosX = this. time2pix ( this. durationMs ) ; ctx . fillStyle = SEEKBAR_DATA_COLOR ; ctx . fillRect ( dataStartPosX , SEEKBAR_POS_Y , dataEndPosX - dataStartPosX , SEEKBAR_HEIGHT ) ; ã·ãŒã¯ããŒã®ç®çãã®æç» ç¶ããŠå°ãé·ãã§ãããã·ãŒã¯ããŒã®ç®çããæç»ããŠããã³ãŒããã玹ä»ããŸãã ctx . font = SCALE_TIME_TEXT_SIZE + 'px sans-serif' ; const { scaleInterval , textInterval } = this. adjustScale ( this. timeMsPerPix ) const startTime = this. pix2time ( 0 ) const endTime = this. pix2time ( this. canvas . width ) const firstScaleTime = Math . floor ( startTime / scaleInterval ) * scaleInterval let i = 0 while ( 1 ) { const scaleTime = firstScaleTime + i * scaleInterval if ( scaleTime > endTime ) { break; } if ( scaleTime > this. durationMs ) { break; } if ( scaleTime < 0 ) { i ++ continue } // ç®çããæç» const scalePosX = this. time2pix ( scaleTime ) const scalePosStartY = SEEKBAR_POS_Y + SEEKBAR_HEIGHT const scalePosEndY = scaleTime % textInterval === 0 ? scalePosStartY + SEEKBAR_SCALE_HEIGHT * 2 : scalePosStartY + SEEKBAR_SCALE_HEIGHT ctx . fillStyle = SEEKBAR_SCALE_COLOR ; ctx . fillRect ( scalePosX , scalePosStartY , 1 , scalePosEndY - scalePosStartY ) // æéãããã¹ãã§æç» if ( scaleTime % textInterval === 0 ) { ctx . textAlign = 'center' ctx . textBaseline = 'top' ctx . fillText ( this. time2str ( scaleTime ) , scalePosX , scalePosEndY + 5 ) } i ++ } æåã«æç»ããç®çãã®æéã¯ä»¥äžã®ããã«èšç®ããŠããŸãã const firstScaleTime = Math . floor ( startTime / scaleInterval ) * scaleInterval ããã§äœ¿ã£ãŠãã scaleInterval ã¯ç®çãã®ééã衚ã倿°ã§ã1ãã¯ã»ã«ãããã®æéå¹
ã«å¿ããŠèª¿æŽããŠããŸãããã®äœçœ®ã¯ãäžå³ã®ããã« ç»é¢ã®å·Šç«¯ã®ãªã®ãªã®å€ã«ããç®çãã®æé ãæããŠããŸãã æåã®ç®çãã®äœçœ®ã決ãŸãã°ãããšã¯ç»é¢å³ç«¯ãŸã§çééã§ç·ãæç»ããŠããã ãã§ãã let i = 0 while ( 1 ) { const scaleTime = firstScaleTime + i * scaleInterval ã» ã»ãã«ãŒããæããå€å® ã» const scalePosX = this. time2pix ( scaleTime ) ã» ã»ãscalePosX ã®äœçœ®ã«ç®çããæç» ã» ++ i } çŸåšæå»ã®æç» çŸåšæå»ã瀺ãèµ€ãç·ãšããã¹ããæç»ããŠå®æã§ãã // äžå¿ã®ç·ãæç» ctx . fillStyle = SEEKBAR_CENTER_LINE_COLOR ; ctx . fillRect ( this. canvas . width / 2 , 0 , 1 , this. canvas . height ) ; // çŸåšæå»ã®æåèæ¯ãå¡ãã€ã¶ã const textBgWidth = 100 const textBgHeight = CURRENT_TIME_TEXT_SIZE + 5 const textBgPosX = ( this. canvas . width - textBgWidth ) / 2 const textBgPosY = ( SEEKBAR_POS_Y - textBgHeight ) / 2 ctx . fillStyle = SEEKBAR_BACKGROUND_COLOR ; ctx . fillRect ( textBgPosX , textBgPosY , textBgWidth , textBgHeight ) ; // çŸåšæå»ã®ããã¹ããæç» ctx . font = CURRENT_TIME_TEXT_SIZE + 'px sans-serif' ; ctx . textAlign = 'center' ctx . textBaseline = 'middle' ctx . fillStyle = SEEKBAR_TIME_TEXT_COLOR ; const textPosX = this. canvas . width / 2 const textPosY = SEEKBAR_POS_Y / 2 ctx . fillText ( this. time2str ( this. currentTimeMs ) , textPosX , textPosY ) ; ã¹ãããïŒ åçäœçœ®ã®ç§»å & ã¹ã±ãŒã«å€æ æåŸã«ãããŠã¹ã€ãã³ãã«åãããŠåçäœçœ®ã®ç§»åãã¹ã±ãŒã«å€æŽãè¡ã£ãŠããã³ãŒããèŠãŠãããŸãããã ãŸããåçäœçœ®ã®ç§»åã¯ããŠã¹ã®ãã©ãã°æäœã«é£åã㊠currentTime ãæŽæ°ããã ãã§ãã this .canvas . addEventListener ( 'mousedown' , ( e ) => { this. isMouseDown = true this. mousePosX = e . offsetX }) this .canvas . addEventListener ( 'mouseup' , () => { this. isMouseDown = false }) this .canvas . addEventListener ( 'mouseleave' , () => { this. isMouseDown = false }) this .canvas . addEventListener ( 'mousemove' , ( e ) => { if ( this. isMouseDown ) { const prevMousePosX = this. mousePosX this. mousePosX = e . offsetX const diffX = prevMousePosX - this. mousePosX const newCurrentTime = this. currentTimeMs + diffX * this. timeMsPerPix this. currentTimeMs = Math . max ( 0 , Math . min ( this. durationMs , newCurrentTime )) this. draw () } }) 次ã«ãã¹ã±ãŒã«ã®å€æŽãã·ã³ãã«ã§ãããŠã¹ãã€ãŒã«ã®æäœã«å¿ã㊠timeMsPerPix ã調æŽããã ãã§ãã this .canvas . addEventListener ( 'wheel' , ( e ) => { e . preventDefault () ; let newTimeMsPerPix = this. timeMsPerPix if ( e . deltaY > 0 ) { newTimeMsPerPix *= 1 . 1 } else { newTimeMsPerPix *= 0 . 9 } this. timeMsPerPix = Math . max ( MIN_TIME_MS_PER_PIX , newTimeMsPerPix ) this. draw () }) ããã§ãããŠã¹æäœã«ããçŽæçãªã·ãŒã¯ãšã¹ã±ãŒã«èª¿æŽãå®çŸã§ããŸããã¿ããæäœããµããŒãããŠããŸãããå®è£
æ¹æ³ã¯éå»ã«å·çãã èšäº ã§ã解説ããŠãããŸãã®ã§ããã¡ããåèã«ããŠããã ããã°ãšæããŸãã ãŸãšã é·ããªããŸãããã以äžãåŠçã®å
šå®¹ã«ãªããŸãã ä»å解説ãã座æšå€æã®èããå©çšããã°ãã¢ã€ãã¢æ¬¡ç¬¬ã§è²ããªãã®ãäœããããªæ°ãããŸãããïŒã¡ãªã¿ã«åº§æšè»žãïŒæ¬¡å
ã«æ¡åŒµããã°ãGoogleMap ã®ãããªãããã¢ããªãäœããŸããã¿ãªããŸã®äœãã®ã圹ã«ç«ãŠãã°å¹žãã§ãã æåŸãŸã§ãä»ãåãããã ããããããšãããããŸããã
ããã«ã¡ã¯ïŒã»ãŒãã£ãŒã§QAãšã³ãžãã¢ãããŠããçŠå±±ã§ãã ä»åã¯ãå
¥ç€Ÿéããªãç§ããä»ãããžã§ã¯ãã®QAã¡ã³ããŒãå·»ã蟌ã¿ãæ¢çŽ¢çãã¹ãã§è£œåå質ãåäžãããçµéšãã話ãããŸãã ãã®èšäºã¯ãç¹ã«ãããªæ¹ã
ã«èªãã§ããã ãããšå¬ããã§ãã æ¢çŽ¢çãã¹ã ãæ°ããå質ä¿èšŒã®åãçµã¿ãèããŠããQAãšã³ãžãã¢ã®æ¹ ããŒã ãéšçœ²ã暪æãã飿ºã§ãçµç¹å
šäœã®çç£æ§ãå質ãé«ãããããã¯ãªãŒãããããŒãžã£ãŒã®æ¹ æ°ããç°å¢ã§èªèº«ã®åŒ·ã¿ã掻ãããŠææãåºãããäžéå
¥ç€Ÿã®æ¹ 課é¡ïŒãªãªãŒã¹ãåã«ãæ
åœããŒã ã ãã§ã¯èŠã€ããããªãäžå
·åã®å£ æåã®éµã¯ãå·»ã蟌ãåãïŒä»ããŒã 飿ºã§æèãã5ã€ã®å·¥å€« 1. ã¿ã€ãã³ã°ãèŠæ¥µãã 2. å¿ççããŒãã«ãäžããŠããã¹ãã«éäžã§ãããç°å¢ãäœã æ°å€çãªç®æšã¯æ
£ããŠãã æ°è»œã«å
±æã§ããå Žãèšãã ãã°ãèŠã€ããããšã ããææã§ã¯ãªã 3. äžé·ã峿¹ã«ã€ãã 4. ã¢ãããŒã·ã§ã³ãç¶æãã 鱿¿ããã®ç»é¢æ
åœããŒããŒã·ã§ã³ åå¥ãã©ããŒãšå¯ãªã³ãã¥ãã±ãŒã·ã§ã³ è¿
éãªãã£ãŒããã㯠5. å
±æã®å Žããé¢ä¿æ§ãç¯ã ãã¹ãçµæãæ°å€çã«å¯èŠå é¢é£é¡æãçšããååŒ·äŒ ææŠã®è£åŽïŒã¶ã€ãã£ãå£ãšãæããããªãçºèŠ ã¶ã€ãã£ãå£ å®æœæéãšä»æ¥åãšã®èª¿æŽ èªèº«ã®èªç¥åºŠãšä¿¡é Œæ æããããªãçºèŠ ã¡ã³ããŒã®ååçãªå§¿å¢ 倿§ãªèŠç¹ããã®çºèŠ ãŸãšãïŒçµç¹ãåãããææãåºãããã«å¿
èŠãªã㚠課é¡ïŒãªãªãŒã¹ãåã«ãæ
åœããŒã ã ãã§ã¯èŠã€ããããªãäžå
·åã®å£ ã»ãŒãã£ãŒã®QAéšéã«ã¯ãåèš16åã®QAãšã³ãžãã¢ãããŸãããããããè€æ°ã®è£œåãæ
åœããŠãããç§ãæ
åœãã補åã®QAã¡ã³ããŒã¯4åãæ®ãã®12åã¯å¥ã®è£œåã«æºãã£ãŠããŸãã æ¥é ãããã¹ãã¹ã¯ãªããã䜿ã£ãç¶²çŸ
çãªãã¹ããšãæ¢çŽ¢çãã¹ãã䞊è¡ããŠå®æœããŠããŸããããæ
åœãããžã§ã¯ãã®ã¡ã³ããŒã ãã§ã¯ãã©ãããŠãèŠã€ãã«ããäžå
·åããããšæããŠããŸããã è¿«ããããªãªãŒã¹ãåã«ãã©ãããã°ãã£ãšå質ãé«ããããã ããïŒããšèããç§ããã©ãçããã®ãã ãä»ãããžã§ã¯ããæ
åœããQAã¡ã³ããŒãå·»ã蟌ãã ãšããã¢ã€ãã¢ã§ãããåãQAãšããè·çš®ã§ããæ®æ®µã¯å¥ã®è£œåã«æºãã£ãŠããã¡ã³ããŒã®æ°é®®ãªèŠç¹ãšå°éçãªçµéšã掻ãããæ¢çŽ¢çãã¹ãã¯ããã£ãšè£œåã®é ããåé¡ãçºèŠããå質ãäžæ®µãšåŒãäžããŠããããšç¢ºä¿¡ããã®ã§ãã æåã®éµã¯ãå·»ã蟌ãåãïŒä»ããŒã 飿ºã§æèãã5ã€ã®å·¥å€« ä»ãããžã§ã¯ãã®QAã¡ã³ããŒã«ååãäŸé Œããã«ããããã¹ã ãŒãºãªé£æºãšåå è
ã®ã¢ãããŒã·ã§ã³ç¶æãéèŠã ãšèãã以äžã®ç¹ãæèããŠæºåãé²ããŸããã 1. ã¿ã€ãã³ã°ãèŠæ¥µãã ãã¹ãã®å®æœã¿ã€ãã³ã°ã¯éåžžã«éèŠã§ããä»åã¯ãæ©èœã90%以äžå®è£
ãããŠããããã€ãªãªãŒã¹ãŸã§1ã¶æåãšããã¿ã€ãã³ã°ã§ååãäŸé ŒããŸãããæªå®è£
ã®æ©èœãå€ããšãã¹ã¿ãŒãæ··ä¹±ããŸãããéå§ãé
ããããšéçºãžã®è² è·ã倧ãããªãããããã®ã¿ã€ãã³ã°ãæé©ã ãšå€æããŸããã 2. å¿ççããŒãã«ãäžããŠããã¹ãã«éäžã§ãããç°å¢ãäœã äž»æ
åœã§ã¯ãªã補åã®æ¢çŽ¢çãã¹ãã¯ã©ãããŠãå¿ççããŒãã«ããããããã§ããã ãããŒãã«ãäžããã¹ã ãŒãºã«é²ãããã«ããã€ã工倫ãè¡ããŸããã æ°å€çãªç®æšã¯æ
£ããŠãã ãŸãã¯ç®çãæèãã€ã€ãæ
£ããŠãããããšãæåã®ç®æšã«ããŸãããè£ã§ã¯å
·äœçãªç®æšæ°å€ã¯èšå®ããŠããŸãããããããªãæ°å€ãæç€ºãããšé广ã ãšèããåŸããå
±æããããšã«ããŸããã æ°è»œã«å
±æã§ããå Žãèšãã Backlogãžã®çŽæ¥èµ·ç¥šã¯ãããã¹ãã¬ããã·ãŒãã«èšå
¥ããŠããã圢åŒã«ããŸãããããã«ãããå
容ã®ç²ŸåºŠãäžå
·åã®éè€ãæ°ã«ããå ±åã§ãããããå¿ççãªããŒãã«ãäžãããŸãã ãã°ãèŠã€ããããšã ããææã§ã¯ãªã äžå
·åãæ€åºã§ããªãã£ãå Žåã§ãã¢ãããŒã·ã§ã³ãäžããªãããããäžå
·åããªããããšã貎éãªæ
å ±ã§ããããšãäŒããŸããããŸããéåæãããæ¹åç¹ããæè¿ããUI/UXåäžã«çŽçµããéèŠãªæ
å ±ã ãšåŒ·èª¿ããŸããã 3. äžé·ã峿¹ã«ã€ãã ãããžã§ã¯ããåæ»ã«é²ããã«ã¯ãäžé·ïŒã°ã«ãŒããªãŒããŒïŒGLïŒã®çè§£ãšååãäžå¯æ¬ ã§ããç§ãã¡ã¯2ã€ã®ã°ã«ãŒãã«åãããŠãããããä»ã°ã«ãŒãã®ã¡ã³ããŒãå·»ã蟌ãã«ã¯ãåã°ã«ãŒãã®GLã®çè§£ãšååãå¿
èŠã§ãããäºåã«çžè«ãã快諟ãåŸããšãšãã«è²Žéãªã¢ããã€ã¹ãããã ããŸãããäžå±€éšã®ãµããŒãã¯ããããžã§ã¯ããæåãããäžã§éåžžã«å¿åŒ·ãåŸæŒããšãªããŸãã 4. ã¢ãããŒã·ã§ã³ãç¶æãã çŽ1ã¶æåã®æ¢çŽ¢çãã¹ããžã®ã¢ãããŒã·ã§ã³ãç¶æããŠããããããå
·äœçãªä»çµã¿ãããã€ãå°å
¥ããŸããã 鱿¿ããã®ç»é¢æ
åœããŒããŒã·ã§ã³ åå è
ã«ã¯é±ããšã«æ
åœç»é¢ãå²ãåœãŠã飜ããé²ããªããäž»èŠæ©èœãåªå
çã«ãã¹ãã§ãããã工倫ããŸããã åå¥ãã©ããŒãšå¯ãªã³ãã¥ãã±ãŒã·ã§ã³ ãªã¢ãŒãã¯ãŒã¯äžå¿ã®ã¡ã³ããŒã«ã¯ãDMãªã©ã掻çšããŠç©æ¥µçã«ã³ãã¥ãã±ãŒã·ã§ã³ãåããäžå
·åæ€åºã®æè¬ãäŒããããå°ã£ãŠããããšããªãã確èªããŸããã è¿
éãªãã£ãŒãããã¯ å ±åãããå
容ã¯ã極åãã®æ¥ã®ãã¡ã«ç¢ºèªããäœãããè¿ä¿¡ããããã«å¿ãããŸãããè¿
éãªã¬ã¹ãã³ã¹ã¯ãå ±åããåŽã®ã¢ãããŒã·ã§ã³ç¶æã«ã€ãªãããŸãã 5. å
±æã®å Žããé¢ä¿æ§ãç¯ã ãã¹ãçµæãæ°å€çã«å¯èŠå æ¯é±ããã¹ãçµæãæ°å€çã«å¯èŠåããåå è
å
šå¡ã«å
±æããŸãããããã«ãããèªåãã¡ã®æŽ»åã補åå質ã«ã©ã®ããã«è²¢ç®ããŠãããã宿ããŠããããŸãããããã«ãç¹ã«åèã«ãªã£ãå ±åå
容ã«ã€ããŠã¯ãæè¬ã®æã蟌ããŠå
±æããåå è
ã®åªåãç§°ããŸããã é¢é£é¡æãçšããååŒ·äŒ ãã¹ãã®äžç€ã«ã¯ãæ¢çŽ¢çãã¹ãã«é¢ããå匷äŒãéå¬ããŸãããå
±éã®é¡æãéããŠããäºãã®èãæ¹ããã¹ãã¹ã¿ã€ã«ãå
±æããæ©äŒãèšããããŒã å
šäœã®ãã¹ãã¹ãã«åäžãšé£æºåŒ·åãå³ããŸããã ææŠã®è£åŽïŒã¶ã€ãã£ãå£ãšãæããããªãçºèŠ ä»åã®åãçµã¿ã§ã¯ããã¡ããæ©ã¿ããããŸãããã幞éã«ãå©ããããå Žé¢ãå€ããããŸããã ã¶ã€ãã£ãå£ å®æœæéãšä»æ¥åãšã®èª¿æŽ åã¡ã³ããŒã®æ¥åãèŠããªãç¶æ³ã§ãã©ã®çšåºŠæéãæ»åºå¯èœãã¯éåžžã«æ©ãŸããç¹ã§ãããGLã«çžè«ããæäœ1æé/é±ãšããäžéå€ãèšããŠèªäž»æ§ã«ä»»ããæ¹éãæ±ºå®ããŸããã èªèº«ã®èªç¥åºŠãšä¿¡é Œæ æãå°ã£ãã®ããã¡ãã§ããäžéå
¥ç€Ÿããå幎匱ãšããããšããããæ®æ®µæ¥ç¹ã®ãªãä»ã°ã«ãŒãã®ã¡ã³ããŒã«èªèº«ã®ååšãç¥ã£ãŠããããä¿¡é Œé¢ä¿ãç¯ãããšã課é¡ã§ãããå匷äŒãªã©ãéããŠç©æ¥µçã«èªå·±é瀺ãè¡ããå°ããã€é¢ä¿æ§ãæ§ç¯ããŠãããŸããã æããããªãçºèŠ ã¡ã³ããŒã®ååçãªå§¿å¢ éåžžãåããŠã®è©Šã¿ã§ã¯æ§åèŠããå
¥ãããšãå€ããã®ã§ãããçå
ããŠã¹ã¿ãŒãããã·ã¥ãåã£ãŠãããã¡ã³ããŒãããŸããããŸããäžç€ã§ãç±å¿ã«å€ãã®å ±åããããã¡ã³ããŒããããŠçµç€ãŸã§ç¶ç¶ããŠãã¹ãã«åå ããŠãããã¡ã³ããŒãªã©ãæ§ã
ãªååããããžã§ã¯ããåé²ãããŸããã 倿§ãªèŠç¹ããã®çºèŠ åã¡ã³ããŒãããããã®åŸæãªèгç¹ããæ§ã
ãªèŠç¹ããäžå
·åãæ€åºããŠãããã®ã¯å€§ããªåç©«ã§ãããããã«ãããç§èªèº«ãããããªèгç¹ããã£ãã®ãããšåŠã³ãæ·±ããããšãã§ããŸããããã®å€æ§ãªèŠç¹ããããæ¢çŽ¢çãã¹ãã®ç䟡ã ãšæ¹ããŠæããŸããã ãŸãšãïŒçµç¹ãåãããææãåºãããã«å¿
èŠãªããš ä»ãããžã§ã¯ãã®QAã¡ã³ããŒãå·»ã蟌ãã æ¢çŽ¢çãã¹ãã¯ã補åã®å質åäžã«å€§ããè²¢ç®ããã ãã§ãªããéšå
éã®ã³ãã¥ãã±ãŒã·ã§ã³æŽ»æ§åã«ãã€ãªãããéåžžã«ææçŸ©ãªåãçµã¿ã§ããã æ¬èšäºã®æå€§ã®äŸ¡å€ã¯ã補åã®å質åäžãšãã çµæ ã ãã§ãªãã ãã®ææãçã¿åºãããä»ããŒã ãå·»ã蟌ããããã®å
·äœçãªããã»ã¹ãšããŠã㊠ãå
±æããç¹ã«ãããŸããå
·äœçãªæ°å€ã¯çããã®ããŒã ã®ç¶æ³ã«ãã£ãŠå€ãããããããŸããããããã«æžãããŠãã工倫ãèãæ¹ã¯ããã£ãšçããã®çµç¹ã§ãåçŸã§ãããšæããŸãã ç§èªèº«ã®ããã«äžéå
¥ç€Ÿã§ãã¡ã€ã³ç¥èãå°ãªãã¡ã³ããŒã§ããä»åã®å·¥å€«ãåããããšã§ããã£ãšçŽ æŽãããææãçã¿åºãããšãã§ããã¯ãã§ãã æ¬èšäºããçããã®å質ä¿èšŒæŽ»åã®äžå©ãšãªãã°å¹žãã§ãã
ããã«ã¡ã¯ã25æ°åãšã³ãžãã¢ã®äžã§ãã 倧åŠé¢ã§ã¯ãããè»ã®äŒç€Ÿãšå
±åã§ãæ©æ¢°åŠç¿ãçšããŠç©çã·ãã¥ã¬ãŒã·ã§ã³ã眮ãæããææ³ãã«ã€ããŠç ç©¶ãè¡ããå
æ¥ããŒãã«ãŠè¡ãããAIé¢é£ã®åŠäŒã§ãã¹ã¿ãŒçºè¡šããŠããŸããããšã¹ãã¬ããœããã¹ã¿ãã¯ã€ã³ãçŸå³ããã£ãã§ãã ãã®ããã°ã§ã¯ãå
¥ç€ŸããŠãã4ã¶æåŒ±ã§è¡ãããæ°åç ä¿®ãããžã§ã¯ãã§åŠãã ããå
šäœåã®å¯èŠåãã®éèŠæ§ã«ã€ããŠè©±ããŠãããŸãã æ°åãšã³ãžãã¢ç ä¿®ã«ã€ã㊠ç ä¿®ã§çŽé¢ããå£ ãããžã§ã¯ãã®å
šäœåãèŠããªãã£ãåæãã§ãŒãº æ¯ãè¿ãäŒãšãå¯èŠåãã®åŸ¹åº Before After ç ä¿®ãæ¯ãè¿ã£ãŠã¿ãŠ 4æ-5æååïŒèª²é¡çºèŠãã§ãŒãº ããå
šäœåãå¯èŠåãããŠããã⊠5æåŸå-6æååïŒèª²é¡çºèŠãã§ãŒãº2 6æåŸå-7æïŒéçºãšæªæ¥èšèšã®ãã§ãŒãº ãŸãšã æ°åãšã³ãžãã¢ç ä¿®ã«ã€ã㊠ä»åã®ã»ãŒãã£ãŒã®æ°åãšã³ãžãã¢ç ä¿®ã§ã¯ã4æçãäžãã7ææ«ãŸã§ã®4ã¶æåŒ±ã§ãã瀟å
課é¡ã解決ããããã®ãããã¯ãéçºããè¡ãªããŸããããã®ç ä¿®ã®æå€§ã®ç®çã¯ãããããã¯ãæèãäœçŸãããšã³ãžãã¢ãšããŠæé·ãããããšã§ããã€ãŸãããŠãŒã¶ãŒç®ç·ã«ç«ã¡ããããã¯ããèããããã«æ²¿ã£ãŠéçºãé²ãããã®äžã§æé·ããŠããããšãæ±ããããŸããã ç ä¿®ã§çŽé¢ããå£ ç ä¿®ãããžã§ã¯ããå§ãŸã£ãŠããã«ç§ãã¡ãçŽé¢ããã®ã¯ããããŒã å
šå¡ã§ãããžã§ã¯ãã®å
šäœåãææ¡ããããšãã®é£ããã§ãããç§ãã¡ã®ããŒã ã«ã¯ã以äžã®2ã€ã®ç®çããããŸããã æ°åç ä¿®ãããžã§ã¯ãã®ç®çïŒãããã¯ãæèã身ã«ã€ãããšã³ãžãã¢ãšããŠæé·ãã ãããã¯ãã®ç®çïŒãŠãŒã¶ãŒã®èª²é¡ã解決ãã ãããžã§ã¯ãã®å
šäœåã®ææ¡ãã§ããŠããªããšããã®2ã€ã®ç®çãåæã«éæããããšã¯é£ãããšçæããŸããã ãããžã§ã¯ãã®å
šäœåãèŠããªãã£ãåæãã§ãŒãº ããŒã ã§ã®éçºãã§ãŒãºãå§ãŸã£ãåææ®µéã§ã¯ããããžã§ã¯ãã®é²æç¶æ³ãææ¡ã§ããŠããŸããã§ããã å£é ã§ã®ã¿ã¹ã¯ç®¡çïŒå£é ã§æ±ºãŸã£ãããšãã¿ã¹ã¯ãšããŠèšé²ããããããããã®ã¿ã¹ã¯ã®ç²åºŠããã©ãã©ã§ãã ã¿ã¹ã¯ã®åãïŒèª°ãäœãããã®ããææ§ã«ãªããããŒã å
šäœã§ã¿ã¹ã¯ãæ±ããŠãã人ãšãããã§ã¯ãªã人ã®å·®ã倧ãããªã£ãŠãããŸããã æŒ ç¶ãšããäžå®ïŒç®ã®åã®ã¿ã¹ã¯ãããªãããšã«ç²Ÿäžæ¯ã§ããæ¬åœã«ãŠãŒã¶ãŒã®èª²é¡ã解決ãããã®ãªã®ãïŒãããã®ããã»ã¹ãèªèº«ã®æé·ã«æ¬åœã«ã€ãªãã£ãŠããã®ãïŒããšããæŒ ç¶ãšããäžå®ãåžžã«ä»ããŸãšããŸããã ããã¯ããããžã§ã¯ãå
šäœã®ææ¡ãã§ããŠããªãããšã«ããããèªèº«ã®æé·ããšããŠãŒã¶ãŒã®èª²é¡è§£æ±ºããšãã2ã€ã®ç®çãèŠå€±ã£ãŠããããšãåå ã§ããã æ¯ãè¿ãäŒãšãå¯èŠåãã®åŸ¹åº ãããžã§ã¯ãå
šäœã®ææ¡ãã§ããŠããªããšãã課é¡ã解決ãããããç§ãã¡ã¯éçºæ©é¢ã®äžéå°ç¹ã§éå¬ããæ¯ãè¿ãäŒã§çŸç¶ãå
±æããŸãããããã§ãç§ãã¡ã¯ä»¥äžã®ã·ã³ãã«ãªã«ãŒã«ã培åºããããšã«æ±ºããŸããã ã¿ã¹ã¯ã¯å¿
ããã±ãããšããŠå¯èŠåããç²åºŠãæãã å
·äœçãªã«ãŒã«ã¯ä»¥äžã®éãã§ãã ãã±ããã¯1~2å¶æ¥æ¥ä»¥å
ã§å®äºãããã®ã«éå®ãã åŠçäžã®ã¿ã¹ã¯ã¯1~2åã«ãã è€æ°ã®ã¿ã¹ã¯ã忥ã«äžŠã¶å Žåã¯ãå
šãŠãã®æ¥ã§çµããããããå Žåã®ã¿ãšãã ãã®ã«ãŒã«ã«ãããã¡ã³ããŒéã§ã¿ã¹ã¯ã®å
±éèªèãçãŸããã¹ã ãŒãºã«éçºãé²ããããããã«ãªããŸããã Before åŒåœç«¶å調æ»ã®äžã§äœãããã®ããã©ã調ã¹ãã®ãããããããé²æç¶æ³ãäžç®ã§åããã¥ãããéçºæ¬éšäŒã¯1æ¥ã®ã¯ããªã®ã«4æ¥ååŒãããŠããããã®äžã§äœãããã®ããããããªãã After ã¢ã€ãã ç»é¢å®è£
ãšãã芪ã¿ã¹ã¯ã«å¯Ÿããäœãããã®ããå°ã¿ã¹ã¯ãšããŠèšå®ãã鲿ã確èªãããããªããŸããã ç ä¿®ãæ¯ãè¿ã£ãŠã¿ãŠ ããç ä¿®éå§åœåã«ãå
šäœåã®å¯èŠåãã®éèŠæ§ã«æ°ã¥ããŠããããç§ãã¡ã®ãããžã§ã¯ãã¯ãã£ãšã¹ã ãŒãºã«é²ãã ãšããä»®å®ã®ããšãéçºç ä¿®ãæ¯ãè¿ã£ãŠãããããšæããŸãã 4æ-5æååïŒèª²é¡çºèŠãã§ãŒãº ãã®ææã¯ããããžã§ã¯ãã®é²ãæ¹ã課é¡ãçºèŠããããã®ææ³ã«é¢ããç¥èãäžè¶³ããŠããŸããã ããå
šäœåãå¯èŠåãããŠããã⊠æçµãŽãŒã«ã®æç¢ºåïŒæçµçã«å®æããããããã¯ãã®èŠæš¡ãããžã§ã³ãæçµå°éç¹ãããŒã ã§æç¢ºã«åæããŠããã°ãããããéç®ããŠãã€ã«ã¹ããŒã³ãèšå®ã§ããã¯ãã§ã Backlogã®é©åãªéçšïŒãŽãŒã«ãå®ãŸã£ãŠããã°ãBacklogã®ãã±ããã®ç²åºŠãèªç¶ãšå®ãŸããææ¢ãã§ã®éçšãé¿ããããšãã§ããã¯ãã§ã 5æåŸå-6æååïŒèª²é¡çºèŠãã§ãŒãº2 ãã®æéã¯ãã¡ã³ããŒãå
¥ãæ¿ããã§ç ä¿®ã«åå ããŠãããããããŒã å
ã§ã®é²æå
±æãäžååã«ãªã£ãŠããŸããŸããã ãããå
šäœåããå¯èŠåãããŠããã... ã¹ã ãŒãºãªé²æå
±æïŒãããžã§ã¯ãã®å
šäœåãå¯èŠåãããBacklogã«é©åã«ãã±ãããåæ ãããŠããã°ãæ»ã£ãŠããã¡ã³ããŒãããã«ç¶æ³ãææ¡ã§ããã¯ãã§ã ããŒã ã®äžè²«æ§ã®ç¶æïŒããŒã ãšããŠã®å€æè»žãå®ãŸã£ãŠããã°ãã¡ã³ããŒãæããŠãæ¹åæ§ãã¶ããããšã¯ãªãã£ãã§ããã 6æåŸå-7æïŒéçºãšæªæ¥èšèšã®ãã§ãŒãº éçºæéã¯ãåœåã®èšç»ããããããã éçºã®å®äºãé
ããŠããŸããŸããããŸããæç¢ºãªã«ãŒã«ããªããŸãŸã¢ãžã£ã€ã«çãªé²ãæ¹ã«ãªã£ããããé²æã®ææ¡ã«èŠåŽããŸããã ãããå
šäœåããå¯èŠåãããŠããã... éçšãèŠæ®ããèšèš: éçºã®åææ®µéãããéçšããããèšèšã«ãªã£ãŠãããïŒããã³ã¹ãã«èŠåã䟡å€ããããïŒããšãã£ãåãã«åãåããå±äººåãé¿ããããã®äººå¡é
眮ãèšç»ãç«ãŠãããã¯ãã§ã ãŸãšã ãã®ç ä¿®ãããžã§ã¯ããéããŠãç§ã¯æè¡çãªã¹ãã«ã ãã§ãªãããããŒã å
šå¡ãåãå
šäœåãå
±æããç®çãæèããŠéçºãé²ããããšããããããžã§ã¯ãã®æåãšèªèº«ã®æé·ã«äžå¯æ¬ ã ãšåŠã³ãŸããã ç ä¿®ã§çŽé¢ããå£ã¯ãç§ãã¡ã倧ããæé·ãããŠãããŸãããé
å±ãããŠæ°é±éçµã£ãä»ããã®çµéšã掻ããã èªèº«ã®æé·ãšããŒã ãšããŠã®ææãäž¡æ¹ã®èŠç¹ãæã£ãŠè¡åããããš ãå¿ãããŠããŸãã ä»åŸããã®ç ä¿®ã§éçºãããããã¯ãã¯ã瀟å
éçšã«åããŠããŒã ã§è°è«ãéããŠãããŸããæè¡ãåŠã¶ã ãã§ã¯ãªããã®æ°åç ä¿®ãããžã§ã¯ããçµéšã§ããããšããããŠå€ãã®å£ãããŒã ã§ä¹ãè¶ããçµéšã¯ãããããã®ãšã³ãžãã¢ãšããŠã®ãã£ãªã¢ã«ãããŠãåžžã«æŽ»ããããŠãã倧åãªæèšã§ãã
ããã«ã¡ã¯ïŒ ã¢ãã€ã«ããŒã ã®å€ç°ã§ãïŒ å
æ¥éå¬ãããåœå
æå€§çŽã®iOSãšã³ãžãã¢åãã«ã³ãã¡ã¬ã³ã¹ã iOSDC Japan 2025 ãã«ãã»ãŒãã£ãŒã®iOSããŒã ãåå ããŸããïŒ ä»å¹Žã»ãŒãã£ãŒã¯æ¬ã€ãã³ãã« ã·ã«ããŒã¹ãã³ãµãŒ ãšããŠåè³ãããŠããã ããŸããïŒ äžèš connpass ã®ããŒãžããã²ã確èªãã ããïŒ yumemi.connpass.com ãããã« ãããã°ãæžããŸã§ãiOSDCããšããããšã§ãç¡äºã«ç§ãã¡ãiOSDCãç· ããããããšãã§ããŸããâïž æåŸã«ãªããŸããããã®ãããªçŽ æŽãããã€ãã³ããäŒç»ã»éå¶ããŠãã ãã£ãã¹ã¿ãããé¢ä¿è
ãã¹ãã³ãµãŒã®çæ§ã«å¿ããæè¬ç³ãäžããŸãã æ¥å¹Žã楜ãã¿ã«ããŠããŸãïŒïŒ ã»ãŒãã£ãŒã§ã¯äžç·ã«åããšã³ãžãã¢ã®ä»²éãéæåéããŠããŸãã å°ãã§ãèå³ãæãããæ¹ãããŸãããããã²äžèšã®æ¡çšããŒãžãã芧ãã ããã safie.co.jp
ã¯ããã« ã»ãŒãã£ãŒã®æ
å ±ã·ã¹ãã ã°ã«ãŒãã§ã°ã«ãŒããªãŒããŒãããŠããæŸå°Ÿãšç³ããŸãã ã»ãŒãã£ãŒã¯ãæ åããæªæ¥ãã€ããããšããããžã§ã³ã®ããšãã¯ã©ãŠãé²ç»ãµãŒãã¹ãæäŸããŠããŸã ãç§ãã¡ã®ãµãŒãã¹ã¯ãé²ç¯ã»èŠå®ãã«çãŸãããæ¥åå¹çåãçŸå ŽDXãªã©ãæ§ã
ãªã·ãŒã³ã§ç€ŸäŒã®ãå®å¿å®å
šããæ¯ããŠããŸãã æ
å ±ã·ã¹ãã ã°ã«ãŒã(以äžãæ
ã·ã¹G)ã§ã¯2025幎1æããå幎ã»ã©ãã¢ãžã£ã€ã«ãå°å
¥ãããããžã§ã¯ãã»ã¿ã¹ã¯ç®¡çã宿œããŸããã ä»åã¯ãã¡ãã®åãçµã¿ã«ã€ããŠãäž»ã«ä»¥äžã®å
å®¹ãæžããŠãããããšæããŸãã ã¯ããã« ãªãã¢ãžã£ã€ã«ãå°å
¥ããã ã©ã®ããã«ã¢ãžã£ã€ã«ãå°å
¥ããã®ã ã¢ãžã£ã€ã«å匷äŒã®å®æœ ã¹ããªã³ãã®å®æœ æ
ã·ã¹ã¢ãžã£ã€ã«ãã¬ã€ããã¯ã®äœæ ã¢ãžã£ã€ã«ã宿œããããã®ç°å¢ã¥ãã ã©ã®ãããªå€åããã£ãã 现ããæ¹åã®äŸ å幎éãæ¯ãè¿ã£ãŠ ãããã« ãªãã¢ãžã£ã€ã«ãå°å
¥ããã ãæ¥ã
ã®åãåãã察å¿ã«è¿œãããæ¬æ¥æ³šåãã¹ãäžé·æçãªã¿ã¹ã¯ããªããªãé²ãŸãªãâŠãå€ãã®æ
å ±ã·ã¹ãã éšéãæ±ããæ©ã¿ã§ã¯ãªãã§ããããã ç§ãã¡ã»ãŒãã£ãŒã®æ
ã·ã¹GãäŸå€ã§ã¯ãããŸããã§ãããã¿ã¹ã¯ã¯åžžã«ã宿œäžãã®ãŸãŸåæ»ããå®äŸå ±åã¯ãé²ãã§ããªãç¶æ³ãã®å
±æã«ãªããã¡ã§ãããŒã ã®å£«æ°ã«ã圱é¿ãåºå§ããŠããŸããã å
·äœçã«ã¯ä»¥äžã®ãããªåé¡ããããŸããã æ¥ã
ã®ç€Ÿå
ããã®åãåãã察å¿ãšãç®æšèšå®ã«çŽã¥ãé·æçãªã¿ã¹ã¯ã䞊è¡ããŠå®æœããŠãããç®æšã«çŽã¥ãé·æã¿ã¹ã¯ã¯åèªãéå§ãšçµäºãèšå®ããŠé²ããŠãããã çªçºçãªæ¥åãªã©ã«ãããã¿ã¹ã¯ã®é²æãé
ããã¡ã«ãªã£ãŠãã ãã®çµæã ã¿ã¹ã¯ããã£ãšã宿œäžãã®ãŸãŸãšãªãã鲿ãèŠãã¥ããç¶æ
ãšãªã£ãŠãã 2é±éæ¯ã«å®æœããŠããå®äŸã§ã¯ãã¿ã¹ã¯ãé²ãã§ããªãç¶æ³ããå
±æããããšã«ãªãã ã¡ã³ããŒã®ã¢ãããŒã·ã§ã³ãäžãããªãç¶æ
ã«ãªã£ãŠãã 鲿ãèŠããªãããã é©åãªã¿ã€ãã³ã°ã§ããŒã ã§ãµããŒãåºæ¥ãªããšãããžã¬ã³ã ããã£ã ãããã®èª²é¡ã解決ãããããæ
ã·ã¹Gã§ã¯ä»¥äžã®ç®çãæ²ããŸããã ç¡çã®ãªã圢ã§ã¡ã³ããŒãææãåºããããã«ãã ãã®ããã«ã ææãå¯èŠåããããŒã å
å€ã«ããã«å
±æã§ããç¶æ
ãäœã ç®æšèšå®ã®ç¶æ³ãæç¢ºã«ããé²æãæ£ç¢ºã«ææ¡ã§ããç¶æ
ãäœã ç®æšéæãŸã§ã®ããã»ã¹ã现ããå»ã¿ããã®æ¹æ³ãé©åãã ããè¯ãæ¹æ³ã¯ãªãããåžžã«æ¢æ±ã§ããããã«ãã å®äŸäŒè°ããåãªãé²æå ±åã§ã¯ãªãã ææãå
±æããå Ž ã«ãã ãããã®ç®çãéæããããã®ã¢ãããŒããšããŠãç§ãã¡ã¯ãã¢ãžã£ã€ã«ããªåãæ¹ã«çç®ããŸããã ã©ã®ããã«ã¢ãžã£ã€ã«ãå°å
¥ããã®ã ã¢ãžã£ã€ã«å匷äŒã®å®æœ ãŸããããŒã ã§ã¢ãžã£ã€ã«ãå§ããã«ããããã»ãã¥ãªãã£ããŒã ãšååã§ã¢ãžã£ã€ã«ã®å匷äŒã宿œããŸãã ã詳现ã¯ãã¡ãã®èšäºãã芧ãã ããã åèèšäº engineers.safie.link ãã®å匷äŒãéããŠãã¢ãžã£ã€ã«ãå°å
¥ããéã«ã¯ä»¥äžãæ°ãã€ãããšããããšãåŠã³ãŸããã ãã¬ãŒã ã¯ãŒã¯ã® ãããæ¹ã ãããåãå
¥ããããšã¯ããªã ããš ã¢ãžã£ã€ã«ã®ååãšãã©ã¯ãã£ã¹ã®ç®çãçè§£ãã çŸç¶ã®ããŒã ã«åã£ããã®ãåãå
¥ããèªåãã¡ã®ãã®ã«ããŠãã ããš äžèšããµãŸããæ
ã·ã¹Gã«åã圢ã§ä»¥äžã®ãããªåœ¢ã§ã¢ãžã£ã€ã«ãåãå
¥ããŠã¿ãããšã«ããŸããã ãŸã㯠ãå幎éã®ãã©ã€ã¢ã«ã ãšããŠå§ããŠã¿ã ã¢ãžã£ã€ã«ã®å°éçšèªã¯ã§ããã ã䜿ããªã æ
ã·ã¹Gã®äžã§ åãå
¥ããããããšã ããå©çš ãã æçµçã«ããã®ä»çµã¿ãã¡ã³ããŒã ç¡çãªãææãåºãããã®ä»äºã®ä»æ¹ã®åãšããŠå®çãã ããšãç®æã ã¹ããªã³ãã®å®æœ 2é±éã1ã€ã®ã¹ããªã³ãïŒæéïŒãšãã以äžã®ãµã€ã¯ã«ã§æ¥åãé²ããŠãããŸããã 2é±éã§ããããšæ±ºãïŒã¹ããªã³ããã©ã³ãã³ã°ïŒ 2é±éã§å®æœããããšã決ãã æäŒïŒãã€ãªãŒã¹ã¿ã³ãã¢ããïŒ æ¯æ¥å®æœããåãåãã察å¿ãšã¿ã¹ã¯ã®é²æç¶æ³ãå°ã£ãŠããããšã確èªãã å®äŸïŒã¹ããªã³ãã¬ãã¥ãŒïŒ 2é±éã§å®æœããææãçºè¡šãã ãµããããïŒã¹ããªã³ãã¬ããã¹ãã¯ãã£ãïŒ 2é±éã®æ¯ãè¿ãã宿œãããã®äžã§åªå
床ã®é«ã察å¿ãã¹ãã¿ã¹ã¯ã決ãã æ
ã·ã¹ã¢ãžã£ã€ã«ãã¬ã€ããã¯ã®äœæ ç¹ã«æèããã®ã¯ãåã«ãã¬ãŒã ã¯ãŒã¯ãå°å
¥ããã ãã§ãªããããªããã®ãã©ã¯ãã£ã¹ãè¡ãã®ãããšããç®çæèãããŒã å
šå¡ã§å
±æããããšã§ããã ãã®ããã«ãåãã©ã¯ãã£ã¹ã®ç®çãå
·äœçãªé²ãæ¹ã ãæ
ã·ã¹ã¢ãžã£ã€ã«ãã¬ã€ããã¯ã ãšããŠèšèªåããŸããã ãã®ãã¬ã€ããã¯ã¯ãéäžã§ããŒã ã¡ã³ããŒãå€ãã£ãŠããç¡çãªãææãåºãä»çµã¿ããç¶ç¶ãããããã®ãç§ãã¡ã®ããŒã ã®éèŠãªéããã¹ãšãªã£ãŠããŸãã èšèŒããäž»ãªå
容 èæ¯ïŒãªãæ
ã·ã¹Gãã¢ãžã£ã€ã«ã«åãçµãã®ã ç®çãšå
·äœçãªé²ãæ¹ ã¹ããªã³ãïŒ2é±éïŒã®é²ãæ¹ 2é±éã§ããããšæ±ºãïŒã¹ããªã³ããã©ã³ãã³ã°ïŒ æäŒïŒãã€ãªãŒã¹ã¿ã³ãã¢ããïŒ æ
ã·ã¹å®äŸïŒã¹ããªã³ãã¬ãã¥ãŒïŒ ãµããããïŒã¹ããªã³ãã¬ããã¹ãã¯ãã£ãïŒ NotionããŒãžã«æ
ã·ã¹ã¢ãžã£ã€ã«ãã¬ã€ããã¯ããŸãšããŠããŸãã ã¢ãžã£ã€ã«ã宿œããããã®ç°å¢ã¥ãã ã¢ãžã£ã€ã«å°å
¥ãšäžŠè¡ããŠãã¡ã³ããŒãç®æšèšå®ã«éäžã§ããç°å¢ã¥ãããé²ããŸããã å
·äœçã«ã¯ãããæ¹ãããçšåºŠæ±ºãŸã£ãŠããå®åžžæ¥åã®ããã¥ã¢ã«ãæŽåããæ¥åå§èšã®ã¡ã³ããŒã«å¯Ÿå¿ããŠãããäœå¶ãäœãããšã§ãæ£ç€Ÿå¡ã¡ã³ããŒã課é¡è§£æ±ºã«éäžã§ãããããªç°å¢äœããé²ããŸããã ã©ã®ãããªå€åããã£ãã ã¹ããªã³ããé²ããŠããäžã§ã以äžã®ãããªå€åãçŸããŸããã ã¹ããªã³ãéå§1ã¶æã»ã© ãããžã§ã¯ãã®å
šäœåãææ¡ ã§ããããã«ãªã£ã ç®æšã«æ²¿ã£ãŠ äžæ¥ã®ã¿ã¹ã¯ãå¯èŠå ã§ããããã«ãªã£ã èªåã®ç®æšãšé²æã以åããæè ããããã«ãªã£ã ä»ã®ã¡ã³ããŒãäœã®ç®æšãç«ãŠãŠããã åããããã«ãªã£ã ããããšãæç¢ºã«ãªããç®æšããã€ã«ã¹ããŒã³ãç«ãŠãããšã§ çžè«ãããããªã£ã 2é±éåäœã®ã¹ããªã³ããæèããå
·äœçã«äœåã®ã¹ããªã³ãã§ãããžã§ã¯ããçµããããªããŠã¯ãããªããšèããããšã§ã ãããžã§ã¯ãã®å
šäœåãæèããã©ããŸã§å®æœããã°å®äºãªã®ãããšããããšãèãã ãããªã£ããšããæèŠãåºãŠããŸããã ãŸããã¹ããªã³ãã§ã¯å¿
ãèšå®ããã¿ã¹ã¯ãå®äºããå¿
èŠãããããã å®äºããããã«ä»æ¥ã¯ã©ã®ã¿ã¹ã¯ãããã¹ãããæèãã ããã«ãªããŸããã ã¿ã¹ã¯ãæèããããšã§ãé²ããããã§ã®èª²é¡ç¹ãåããããã«ãªããããŒã ã§ çžè«ããããã ãªããŸããã 2åç®ã¹ããªã³ãã®ãµããããã®æ§å ã¹ããªã³ãéå§2ã¶æã»ã© (ã¢ãžã£ã€ã«ããã¯ã®äœæã«ãã)ã¿ã¹ã¯ç®¡çã®åãçµã¿ãèšèªåã§ãã ãŽãŒã«ãæœè±¡çãªãããžã§ã¯ããžã®æææãå°ãªããªã£ã ïŒãšãããã2é±éã®ã¿ã¹ã¯ã決ããŠé²ããéœåºŠä¿®æ£ããŠãããµã€ã¯ã«ãåºæ¥ãŠãã) ã¿ã¹ã¯ã®ããã»ã¹ãæèãã ã§ããã ã现ããã¿ã¹ã¯åããããã«ãªã£ã ã¿ã¹ã¯ã现ååããããšã§ãã¹ã±ãžã¥ãŒã«ã«æ²¿ã£ã察å¿ãã§ãã çªçºçãªã¿ã¹ã¯ãèæ
®ããŠã ãããã¡ãæãããç®æšèšå®ãããæèŠã銎æãã§ãã ååã®æ¯ãè¿ããšæ¯èŒããããšã§ãããæèããŠç®æšç®¡çã«åãçµããããã«ãªã£ã 2é±éåäœã§ã®ä»äºã®é²ãæ¹ã«æ
£ããŠããããšããããããŒã ã§ 2é±éã§å®æœå¯èœãªã¿ã¹ã¯ã®éã®æèŠãå°ãã¥ã€åãã£ãŠãã ãšããæèŠãåºãŠããŸããããã®çµæãçªçºçãªã¿ã¹ã¯ãèæ
®ãã ããçšåºŠãããã¡ãããããç®æšèšå®ãåºæ¥ã ããã«ãªã£ãŠããŸããã ãŸãã2é±éã§ã¿ã¹ã¯ãåºåãããŠãããšããããšããããŽãŒã«ãæœè±¡çã ã£ããå
šäœã®ã¿ã¹ã¯ãµã€ãºãåãããªããã®ã§ãã ãšãããã2é±éã§åºæ¥ãäºã決ããŠãéœåºŠæ¹åãä¿®æ£ããŠãã ä»äºã®é²ãæ¹ãåºæ¥ãããã«ãªã£ãŠããŸããã 现ããæ¹åã®äŸ ã¹ããªã³ããç¹°ãè¿ãäžã§ãã¿ã¹ã¯ç®¡çã®æ¹æ³ã现ãã倿ŽãããŠãããŸããã ä»åã¯äžäŸãšããŠãæäŒã®éå¶æ¹æ³ãã©ã®ããã«å€æŽããŠãã£ãããã玹ä»ããŸãã 課é¡ïŒ æäŒã®ã¹ããŒãæããªã æ¹åçïŒ Backlogã®è¡šç€ºãã¬ã³ããã£ãŒãããããŒã圢åŒã«å€æŽãã仿¥ããããšãã®ã¹ããŒã¿ã¹ã远å ãã çŸåšåãããã£ãŠããã¿ã¹ã¯ãåããããããã 課é¡ïŒ 誰ããå°ã£ãŠããŠãããã®å
容ãåããã¥ãã æ¹åçïŒ åœçªå¶ã ã£ãæäŒã®ãã¡ã·ãªããŒã·ã§ã³ãã°ã«ãŒããªãŒããŒã«åºå® ãåããŒãã§ã¡ã³ããŒã« ã確èªãããããšã¯ãããŸããïŒããšããåããããå
¥ãã ããã«ãã 課é¡ïŒ ã2é±éããããšæ±ºããã®å Žãããã ã¿ã¹ã¯ãåèªã決ããã ãã®å Žã«ãªã£ãŠããŠãã æ¹åçïŒ ã2é±éããããšæ±ºããã§ã¡ã³ããŒã2é±éã§ããããšã決ããåŸã«ãçåç¹ãç¥ãããããšãªã©çããæèŠããããåãããã远å ãã ã³ãã¥ãã±ãŒã·ã§ã³ã®å Žã«ããããã«ãã 課é¡ïŒ å°ã£ãŠããããšã®çžè«ã解決çã®è°è«ã«ãŸã§çºå±ããæäŒãé·åŒããŠããŸã æ¹åçïŒ æäŒã2éšå¶ã«å€æŽ ãååã¯å®åžžæ¥åäžå¿ã®ãã«ããã¹ã¯ããŒããšããéå®åžžæ¥åã®çžè«ã¯åŸåã«åãããã«ãã 課é¡ïŒ åãåãã察å¿ã誰ããããããèŠåãã«ãªã£ãŠããŸã æ¹åçïŒ ããŒã ã§è©±ãåãã äžæŠã®å¯Ÿå¿ãšããŠåãåãã察å¿ããã±ããããšã®èŒªçªå¶ã«å€æŽ ãã ãã®ããã«ã2é±éããšã«ãµãããããšçްããæ¹åãç¹°ãè¿ãããšã§ãæäŒã®éå¶æ¹æ³ãå°ããã€æ¹åããŠãããŸããã å幎éãæ¯ãè¿ã£ãŠ å幎éã®ãã©ã€ã¢ã«ãçµãŠãããŒã ã«ã¯ä»¥äžã®å€åãæåãå®çããŸããã 现ãã確èªãšæ¹åãç¹°ãè¿ãä»çµã¿ (ã¢ãžã£ã€ã«ãªä»äºã®é²ãæ¹)ãããçšåºŠã ããŒã ã«å®ç ãã 2é±éããšã®å®äŸããææãçºè¡šã§ããå Žã«ãªã£ã 现ããææãçºè¡šããŠããä»çµã¿ã«ãªã£ãããšã§ã ç®æšèšå®ã®è©äŸ¡ã以åããæžãããããªã£ã éå®åžžã®åãåãã察å¿ãã¿ã¹ã¯æ¯ã®èŒªçªå¶ã«ããããšã§ãããŒã å
ã§ã®ããŠããŠå
±æãé²ãã ã ãã£ãããšã®ãªãåéããã£ãŠã¿ãæåãæ ¹ä»ããŠãã ãå®ç§ã§ãªããŠãããã®ã§ããšãããããã£ãŠã¿ãã解決ããªããã°ããŒã ã®ã¡ã³ããŒã«çžè«ãããããã«é Œãã ãšããé°å²æ°ãå®çãã ãé Œãããšã¯æªãããšãããªãã ãšãããã€ã³ããæµžéãã 现ãã確èªãšæ¹åãç¹°ãè¿ãä»äºã®é²ãæ¹ãå®çããããšã§ããããžã§ã¯ããé²ããããã§ææ»ããå°ãªããªã£ãããæ¹åæ§ãä¿®æ£ããªããåããšããããšãåºæ¥ãããã«ãªããŸããã ç¹ã«ã ãšãããããã£ãŠã¿ãŠãåãããªããã°ããŒã ã«çžè«ãããé Œãããšã¯æªãããšã§ã¯ãªã ãšããæåãå®çããããšã¯ãããŒã ã«ãšã£ãŠãéåžžã«éèŠãªäºã ãšèããŠããŸãã äžèšã®æåãå®çãããããããåãåãã察å¿ã®èŒªçªå¶ã§ã¡ã³ããŒã宿œããããšããªãåãåããããã£ãå Žåã§ãç©æ¥µçã«å¯Ÿå¿ããããé£æåºŠãé«ããããžã§ã¯ãã«ã€ããŠããŸãã¯ãã£ãŠã¿ãŠãããŒã ã«çžè«ããŠé²ããŠããããšãåºæ¥ãããã«ãªã£ããšæããŠããŸãã å幎éã®ãã©ã€ã¢ã«ã«ã€ããŠãµãããããããæ§å ãããã« æåŸãŸã§ãèªã¿ããã ããããããšãããããŸãããä»åã¯ãã»ãŒãã£ãŒã®æ
å ±ã·ã¹ãã ã°ã«ãŒããåãçµãã ã¢ãžã£ã€ã«å°å
¥ã®éã®ããã玹ä»ããŸããã ä»åã®ã¢ãžã£ã€ã«ã®å°å
¥ã¯ããã§çµããã§ã¯ãªããä»åã®åãçµã¿ã§ããŒã ã«ä»åŸãæ¹åãç¶ããŠããäºå®ã§ãã ç§ãã¡ã®è©Šè¡é¯èª€ã®éçšããåããããªããŒã ã®èª²é¡ã«æ©ãæ¹ããæ
å ±ã·ã¹ãã éšéã®åãæ¹ã«é¢å¿ã®ããæ¹ã«ãšã£ãŠãå°ãã§ãåèã«ãªãã°å¹žãã§ãã
å°å
¥ ãä¹
ãã¶ãã§ããæäº¥ã§ããæŽããŠã»ãŒãã£ãŒæ ªåŒäŒç€Ÿæ°åãšã³ãžãã¢ãšãªããŸãããïŒ åè ïŒ ç ä¿®ã§åç»ã®ä»çµã¿ã«é¢ããŠåŠã¶æ©äŒããã£ãã®ã§ããããã®ãã¡ã®ç»åå§çž®ã«é¢ããŠã€ã¡ãŒãžãã¥ããéšåããããšæããŸãããåæãšã³ãžãã¢ã§å匷äŒããããä»åã¯ããã§è©±ããå
容ãäžéšå çä¿®æ£ããŠè§£èª¬ããããšæããŸãã å°å
¥ ã³ã³ãã¥ãŒã¿ã§ã®ç»åã®æ±ãæ¹ YUVãšã¯ 颿£ã³ãµã€ã³å€æïŒDCTïŒ ãŸãšã ã³ã³ãã¥ãŒã¿ã§ã®ç»åã®æ±ãæ¹ ç»åå§çž®ã®åã«ç»åãããŒã¿ãšããŠæ±ãããŠããããšãç¥ããªãæ¹åãã«ãç»åãããããã©ã®ããã«ããŒã¿ãšããŠæ±ãããŠãããã説æããŸãã 説æã®ããã«ç»åãæ¡å€§ããŠèŠãããšãã§ããã¢ããªãGeminiã§äœæããŸããã 画像ピクセル拡大ツール (クリック固定機能付き) ç»åãå
¥åããã¯ãªãã¯ããå°ç¹ã8Ã8ãã¹ã§æ¡å€§ããŠã¿ãããšãã§ããŸããæ¡å€§ã ãã§ãªããRGBå€ã§è¡šç€ºããã¢ãŒããšãã€ããªå€ã§è¡šç€ºããã¢ãŒãããããŸãã ãã¡ããç»åãæ¡å€§ããæã®å³ã§ããå·Šã®ç»åã®å°ãããªã¬ã³ãžè²ã«ãªã£ãŠããïŒã»ãŒãã£ãŒã®ããŽã®åŽïŒéšåãæ¡å€§ããããã®ãå³ã®ã°ãªããå³ã«ãªããŸãã äžè¬çã«ç»åã¯0~255ã®256段éã®RGBïŒRed, Green, BlueïŒå€ãåç»çŽ ããšã«ãã£ãŠããŸãã以äžã®ç»åã¯æ¡å€§ããã°ãªããå³ãRGBã®å€ã§è¡šãããã®ã§ãã ã³ã³ãã¥ãŒã¿ã¯0ãš1ã§è§£éããã®ã§ããŒã¿éã¯2鲿°ã§èããå¿
èŠããããŸãããã®0ãŸãã¯1ãããããšèšãåäœã§èããŸãã 256ã¯2鲿°ã§2 8 ãªã®ã§0ïœ255ã衚ãããã«ã¯8ããããå¿
èŠã§ããç»åã«ãããŠããã®ãããæ°ãæžããã®ãç»åå§çž®ã§ãã YUVãšã¯ YUVãšã¯RGBãHSVãªã©ãšåãè²ç©ºéïŒè²ã®è¡šãæ¹ïŒã®ïŒã€ã§ãã 人ã®çŒã®ãèŒåºŠä¿¡å·ã«å¯ŸããŠææããšãè²å·®ä¿¡å·ã«å¯ŸããŠéæããšããç¹æ§ã«åãããè¡šãæ¹ã§ãèŒåºŠä¿¡å·Yãšéè²æåã®è²å·®UïŒãŸã㯠ïŒãšèµ€è²æåã®è²å·®VïŒãŸã㯠ïŒã§æ§æãããŠããŸãã ãã£ã¹ãã¬ã€ã«è¡šç€ºãããéãã«ã¡ã©ã§æ®åœ±ããçã®ããŒã¿ã¯RGBã§ããããã®ãè²å·®ä¿¡å·ã«å¯ŸããŠéæããšããç¹æ§ãããYUVã«å€æãããããšã§ãããæ°ãæžããããšãã§ããŸãã ãããäœéšã§ããã¢ããªãGeminiã䜿ã£ãŠäœããŸããã YUV3層ビューワ ããã«ç»åãã¡ã€ã«ãäžãããšãYUVããããã®å±€ãã©ã®ãããªåœ¹å²ãããŠããããçŽæçã«ããããŸãããŸããã¡ãã®ã¹ãããæ°ãšããã®ã¯ãYã§çžŠÃ暪ãUã§çžŠÃ暪ãVã§çžŠÃ暪ãšããããïŒæ¬¡å
ã®ç»çŽ ãæã£ãŠããŸãããããäœåãã€é²ãããšãããã®ã§ãã äŸãã°ã¹ãããæ°ãïŒã§ããã°ãã®å±€ã¯å®å
šãªæ
å ±ã§ããã¹ãããæ°ãïŒã ãšïŒã€é£ã°ããŠãé£ã°ãããã¹ã¯ãã®åã®å€ã§åããããã®ã§ãåãç»çŽ å€ãïŒã€é£ç¶ããããšã«ãªããŸããããããæã®å
šäœã®ãããæ°ã¯Yã100%ãUã50%ãVã50%ãšãªããŸããã€ãŸããããæ°ã¯2/3ã§67%ã»ã©ã«ãªããŸããããã¯YUV 4:2:2ãšåŒã°ããæ¹åŒãšåãã§ãã YUV 4:2:0ãšåŒã°ããæ°Žå¹³ã»åçŽæ¹åã«ããããïŒã€é£ã°ããŠããæ¹åŒã§ã¯Yã100%ãUã25%ãVã25%ãšãªããããæ°ã¯1/2ãšãªããŸãã ã¢ããªã®æ¹ã§è©ŠããŠããããšãããéããYãã¹ããããããšããã«ããããŸãããUãšVãå°ãé£ã°ããã ãã§ã¯æ°ã¥ããŸãããããããŠè²å·®ä¿¡å·ãæžãããŠãããšå§çž®ããããšãã§ããŸãã ITU-R BT.601ãšããã¢ããã°ä¿¡å·ãšããžã¿ã«ä¿¡å·ãçžäºã«å€æããããã®èŠæ ŒããããŸããããã«ãããšãRGBãšYUVã®é¢ä¿åŒã¯åŒïŒã®ããã«å®çŸ©ãããŠããŸãã åŒïŒïŒRGB to YUV 颿£ã³ãµã€ã³å€æïŒDCTïŒ DCTã¯å³å¯ã«ã¯å§çž®æ¹æ³ã§ã¯ãªããå§çž®ã®ããã«å¿
èŠãªåŠçã®ïŒã€ã§ãã倿ã®ããã«ç»åã«åšæ³¢æ°ã®èããå°å
¥ããŸãã å³ã®ãããªã®ã£ãºããšããæ¿æ·¡ã®å€åãå°ãªãç»åãäœåšæ³¢ãªç»åãåèæš¡æ§ãå·Šã®æ¿æ·¡ã®æ¿ããç»åãé«åšæ³¢ãªç»åãšãããŸããèªç¶ç»ã§ã¯é«åšæ³¢ãªç»åãå°ãªããé«åšæ³¢æåãåã£ãŠããŸã£ãŠãããŸã圱é¿ãäžããŸãããããã§DCTãè¡ã£ãŠç»åãåšæ³¢æ°ã«ããŠããé«åšæ³¢æåãåãããšã§ç»è³ªã«ããŸã圱é¿ãäžããã«ç»åãå§çž®ã§ããŸãã DCTã®å
·äœçãªææ³ã®åã«ãããŒãªãšå€æãšããæŠå¿µãã話ãããŸãããå
šãŠã®åšæä¿¡å·ã¯æ£åŒŠæ³¢ã®åæã§è¡šçŸã§ããããšããèãããããããã«åºã¥ãæ³¢åœ¢ãæ°žé ã«ç¶ããšä»®å®ããŠåæå
ã®æ£åŒŠæ³¢ãå°ããŸãããã£ãããããšãããããŒãªãšå€æã§ãããæ³¢åœ¢ãã©ã®åšæ³¢æ°ã®ã©ã®ãããã®åŒ·åºŠã®æ£åŒŠæ³¢ã§æ§æãããŠããããããããšãããã®ã§ãã DCTã®åŒã¯åŒïŒã§ç€ºãããšãã§ããŸãããå匷ããŠããåœæããããèŠãŠãããããããŸããã§ããã åŒïŒïŒImage to Power DCTã¯ããŒãªãšå€æãšäŒŒãããšããã£ãŠãããç»åã®åå±€ãïŒæ¬¡å
ã®æ³¢ã ãšèãããããã¯åäœã§çްããåããç»åãåšæ³¢æ°æåã«åè§£ããŸãã äŸãã°ïŒÃïŒãã¹åäœã§DCTãè¡ãå ŽåããŸã0ïœ7Hzã®æ³¢åœ¢ãäœããŸãã ãããããšäžèšã®å³ã®ãããª8ã€ã®æ³¢åœ¢ãã§ããŸãã å³ïŒ0ïœ7Hzã®é¢æ£æ³¢åœ¢ ãããããšã«äžèšã®å³ã®ãããªåºåºé¢æ°ç»åãšããããã°ã¬ãŒã¹ã±ãŒã«ã®ç»åãäœæããŸããããã¯2ã€ã®æ³¢ã®è©²åœããéšåã8Ã8ã®åãã¹ã§æãç®ããŸãã å³ïŒåºåºé¢æ°ç»åïŒu, vïŒ= (5, 2) ãã®ãããªç»åã0ïœ7Hzã®8ãã¿ãŒã³ãçžŠÃæšªã®èš64ãã¿ãŒã³ãçšæããŸãã ããã¯8Ã8ãã¹åäœã§DCTãè¡ãã®ã§ããã°ã©ããªç»åã«å¯ŸããŠã§ãåã64ãã¿ãŒã³ã®ç»åã䜿ããŸãã äžèšã®å³ã®ããã«ãçæãã64ãã¿ãŒã³ã®ç»åãšå¯Ÿè±¡ã®ãããã¯ãšã®å
瞟ãåã£ãå€ãDCT倿åŸã®ç»çŽ å€ãšãªããŸãã å³ïŒDCT倿 DCT倿åŸã®ç»åã¯ãããã¯åäœïŒãã®å Žåã¯8Ã8ã®ç»åïŒã«ãªããŸããåå²ããæ°ã ãDCTç»åïŒä¿æ°ïŒãããã®ã§ãã®ç¶æ
ã§ã¯å§çž®ãããŠããŸãããç»åãåšæ³¢æ°æ
å ±ã«å€ãã£ãã ãã§ãã ãããäœéšã§ããã¢ããªãåæ§ã«Geminiã䜿ã£ãŠäœããŸããã DCT/IDCT可視化ツール ç»åãå
¥åããã¯ãªãã¯ããŠç¯å²ãæå®ãããšãã®éšåã«å¯ŸããŠDCTä¿æ°ãèšç®ããããšãã§ããŸããåºåãããDCTä¿æ°ã«å¯ŸããŠå
šç¯å²ãéžæããŠéDCTãããããšã§ãå
ã®ç»åã«æ»ãããšãã§ããŸããåœç¶ç¯å²ãéå®ããŠéDCTãããããšå§çž®ã«ãã£ãŠå
ã®ç»åãšã¯å°ãéãçµæãšãªããŸããåºåããã衚ãèŠããšãã®ç»åã®å±æçãªDCTä¿æ°ãããããŸãããåä¿æ°ããã®åšæ³¢æ°ã®åœ±é¿ãäžãã倧ããã ãšæã£ãŠããã ãããšããã§ãããã²ããããªæ¡ä»¶ã§è©ŠããŠã¿ãŠãã ãããïŒéDCTçµæã®ç»åãã°ã¬ãŒã¹ã±ãŒã«ãªã®ã¯YUVã®Yæåã®ã¿ã§èšç®ããŠããããã§ããïŒ ãŸãšã åç»å§çž®ã®ä»çµã¿ã«ã€ããŠYUVãšDCTãçšããéšåã«ã€ããŠç°¡åãªã¢ããªã䜿ã£ãŠè§£èª¬ããŸãããYUVãçšããããšã§è²å·®æ
å ±ãåãããšãã§ããDCTãçšããŠç»åãåšæ³¢æ°æåã«ããããšã§ç»è³ªã«åœ±é¿ãäžããªãæ
å ±ã«çµã£ãŠåãããšãã§ããããšãããããŸããã倧åŠã§ç¿ã£ãŠããåœåã¯ããŸãäœã«äœ¿ãã®ãçè§£ã§ããªãã£ãããŒãªãšå€æãªã©ã®æŠå¿µããå²ãšæ§ã
ãªå Žé¢ã§åºãŠããããšãå€ãã®ã§ãæã®èªåã«ãã£ãããã£ãŠããããå¿ åããããšããã§ãã ãŸãç§ã調ã¹ãŠãããšãã¯ãåºåçµæç»åã®å·®ã§ã¿ãããšãã§ããYUVã¯ãŸã ãããDCTã«é¢ããŠã¯64ãã¿ãŒã³ã®è¬ã®ç»åïŒåºåºé¢æ°ç»åïŒã®æå³ããã£ãšããããããªãã£ãã®ã§ãä»åã®ã¢ããªã§èª°ãã®çè§£ã®å©ãã«ãªããšããããæããŸãã äœè«ã§ãããæè¿è²·ã£ããH.264/AVCæç§æžããå³ã亀ããŠãã£ããæžãããŠããŠå人çã«ããããã§ãããã®èšäºã§åç»å§çž®ã®ä»çµã¿çã«èå³ãæã£ãŠãã ãã£ãæ¹ã¯èªãã§ã¿ãŠããããããããŸããã
ããã«ã¡ã¯ãiOS ãšã³ãžãã¢ã® @monolithic_adam ã§ãã iOSDC Japan ãè¿ã¥ããŸããããä»å¹Žã¯æ°ããäŒå Žã§æ¥œãã¿ã«ããŠããŸãã #Safie ã¯ä»å¹ŽåããŠã·ã«ããŒã¹ãã³ãµãŒãšããŠåå ãããŠããã ããŸãïŒ äŒå Žã«ãŠã»ãŒãã£ãŒã®ã¡ã³ããŒãèŠããããããã²å£°ããããŠãã ããã iOSDC Japan 2025åå æ
å ± ããã«ãã£ãŒ ãã³ãã¬ãã ã¯ã©ãŠãé²ç»ãµãŒãã¹ãSafieãã«ã€ã㊠Our App Safie ViewerïŒã»ãŒãã£ãŒ ãã¥ãŒã¢ãŒïŒ æåŸã« We are hiring! iOSDC Japan 2025åå æ
å ± ããã«ãã£ãŒ ã»ãŒãã£ãŒãªãªãžãã«ã®ã¢ã³ãã¬ã©ããŒã«ãŒã§ãã ããã«ãã£ãŒä»ããã±ããã®æ¹ã«ã¯ãå±ããããã¯ããªã®ã§ããæŽ»çšãã ããïŒ ãã³ãã¬ãã iOSDCããã¯å
ã®ãã³ãã¬ããã«ãã以äžã®å
å®¹ãæ²èŒãããŠããã£ãŠããŸãã æ¯éãšãã芧ãã ããïŒ ã¯ã©ãŠãé²ç»ãµãŒãã¹ãSafieãã«ã€ã㊠ä»å¹Žã¹ãã³ãµãŒãšããŠååå ãšããããšããããSafieïŒã»ãŒãã£ãŒïŒãšãããµãŒãã¹ã«ã€ããŠãåããªãæ¹ã°ããããšæããŸãã ãã®å Žã§ç°¡åã«Safieã«ã€ããŠã玹ä»ãããŠãã ããã Safieã®ãµãŒãã¹ã«ã€ã㊠äžèšã§èšããšãã«ã¡ã©ã®æ åãã¯ã©ãŠãåãããµãŒãã¹ã§ãiOSã¢ããªãšããŠã¯ã«ã¡ã©ãæäœããããæ åãé²èЧãããšãã£ãæ©èœãæäŸããŠããŸãã Our App ãšããããšã§ã次ã«iOSã¢ããªã«ã€ããŠç޹ä»ãããŠãã ããïŒ Safie ViewerïŒã»ãŒãã£ãŒ ãã¥ãŒã¢ãŒïŒ ã¢ããªã¯ ãã¡ã ããããŠã³ããŒãå¯èœ ãã¢æ©èœã«ãããç¡æã»ã¢ã«ãŠã³ããªãã§äœéšå¯èœã§ã #SafieViewer ã§ã¯ããã€ãç¹åŸŽçãªæ©èœãæäŸããå¿
èŠãããã åç»ã®åç WebRTC / HLSã®ãã€ããªããåç»é
ä¿¡ã«å¯Ÿå¿ ã€ãã³ããé²ç»æç¡ã衚瀺ããããã®ãªãããªã·ãŒã¯ã㌠åºè§æ®åœ±ããŠæªãã åç»ã3D空éã§è£æ£ åè: セーフィーの新製品「Safie Go 360」のAndroid実装 - Safie Engineers' Blog! ããŒã¯ããã¯æ©èœ ã¢ããªããé³å£°ãå
¥åã WebSocket ãçµç±ããŠã«ã¡ã©ããé³å£°ãåç ãšãã£ãæè¡çã«ãé¢çœãéšåãè²ã
ãšãããŸãã æåŸã« ä»å¹Žã¯æ°ããäŒå Žã§ãããã»ãŒãã£ãŒãåã¹ãã³ãµãŒã§è²ã
ãšã¯ã¯ã¯ã¯ããŠããŸãïŒ äŒå Žã§ã»ãŒãã£ãŒããã®Tã·ã£ããçãŠãã人ãèŠãããããæ¯éãšãã話ãããŸãããïŒ æé«ã«iOSDCãçãäžããŠãããŸãããïŒïŒ â» iOSDCã«é¢ããŠã®ææ°æ
å ±ã¯å
¬åŒãµã€ããåã€ãã³ãããŒãžãã確èªãã ãã ä»ç€Ÿæ§ãšååã§éå
¬åŒã®ã¢ãã¿ãŒã€ãã³ãããããŸãïŒ yumemi.connpass.com We are hiring! ã¢ãã€ã«ããŒã ã§ã¯ã倿§ãªç°å¢ã§äžçã«åããã¢ããªããšãã«éçºãã仲éãåéããŠããŸãïŒ open.talentio.com
ã¯ããã« ããã«ã¡ã¯ãããŒã¿ããªãã³æšé²å®€ã§ããŒã¿ãšã³ãžãã¢ããã£ãŠããé¶Žã§ãïŒ å
æ¥ã OSS BIããŒã«ã«ã€ããŠã®ããã°èšäº ãåãããŒã ã®å°å®®ãæçš¿ããŠãããŸãããããã®äžã§ã玹ä»ããŠãããLightdashãã§ã«ã¹ã¿ã ãã£ãŒããšããæ©èœããããŸãã å人çã«æ°ã«ãªã£ãŠããæ©èœã ã£ãã®ã§å®éã«è§Šã£ãŠã¿ãŠã©ã®ãããªæãã§äœ¿ããã®ããã°ã©ãã¯ã©ããªæãã«ãªãã®ãã玹ä»ããããšæããŸãïŒ ã¯ããã« Lightdashã®ã«ã¹ã¿ã ãã£ãŒããšã¯ ã«ã¹ã¿ã ãã£ãŒããè§Šã£ãŠã¿ã æåŸã« Lightdashã®ã«ã¹ã¿ã ãã£ãŒããšã¯ Lightdashã«ã¯ å
¬åŒããã¥ã¡ã³ã ã«èšèŒãããããã«æšæºã§ããŸããŸãªãã£ãŒãã䜿ãããšãã§ããŸãã 2025/06æç¹ã§ã¯ä»¥äžã®10åã®ãã£ãŒãããããæ®éã«äœ¿ãåã«ã¯å°ããªãæãã§ãã 衚 (Table) åã°ã©ã (Pie chart) ãã¡ãã«ãã£ãŒã (Funnel chart) æ£ã°ã©ã (Bar chart) é¢ã°ã©ã (Area chart) æãç·ã°ã©ã (Line chart) 暪æ£ã°ã©ã (Horizontal bar chart) æ£åžå³ (Scatter chart) è€åã°ã©ã (Mixed chart) æ°å衚瀺 (Big Value) åèïŒç©ã¿äžãæ£ã°ã©ãã®ã€ã¡ãŒãž æŽã«Lightdashã§ã¯ããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³ã®è¡šçŸã®å¹
ãäžããæ©èœãšã㊠ã«ã¹ã¿ã ãã£ãŒã æ©èœããããŸãã ãã®æ©èœã¯ VegaâLite ãããŒã¹ãšããé«åºŠãªããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³æ©èœã§ãLightdashäžã§æšæºã°ã©ãã§ã¯ã§ããªããããªã°ã©ãã¹ã¿ã€ã«ã现ããèšå®ãJSONããŒã¹ã§äœæã§ããŸãã ïŒãªãããã¡ãã®æ©èœã¯å
¬åŒããã¥ã¡ã³ãã«èšèŒãããããã«ãŸã ããŒã¿çãšãªã£ãŠãããŸãã®ã§ã泚æãã ããïŒ äœ¿ãæ¹ãšããŠã¯ãšãŠãç°¡åã§ä»¥äžã®ããã«ããŠãããšäœ¿ããŸãã ãQuery from tablesãã§å¯Ÿè±¡ããŒãã«ãéã 察象ãã£ã¡ã³ã·ã§ã³ãšã¡ããªã¯ã¹ãéžæããChartã®ãConfigureããã¯ãªã㯠ãã£ãŒãèšå®ã®ãChart typeãã®ãªã¹ãã®äžã«ãããCustomããã¯ãªã㯠JSONç·šéç»é¢ãåºãŠããŸãïŒç°¡åã«ç·šéã§ããŸããïŒïŒ ãŸããã®ã«ã¹ã¿ã ãã£ãŒãæ©èœã§ããæè¿ã® ã¢ããããŒã ã§ãã³ãã¬ãŒãæ©èœãæèŒãããããè§ŠãããããªããŸããïŒ ä»åã¯æ°ã«ãªã£ãããã€ãã®ãã£ãŒãã詊ãã«äœã£ãŠã¿ãŠã©ããªã°ã©ããã§ããã®ã詊ããŠã¿ãŸãïŒ ã«ã¹ã¿ã ãã£ãŒããè§Šã£ãŠã¿ã æè¿å®è£
ããããã³ãã¬ãŒãã¯ã«ã¹ã¿ã ãã£ãŒããéããæã«è¡šç€ºãããã+Insert templateãããéžã¶ããšãã§ããããã§ãã ãã³ãã¬ãŒããã¯ãªãã¯ãããšJSONã³ãŒããçæãããèªåçã«éèšå¯Ÿè±¡ããããã³ã°ãããæãã«ãªã£ãŠãŸãã ãã®fieldã§å©çšãããŠããé
ç®ã¯Resultsã®äžã«ããSQLã§èªåçæãããSQLã®é
ç®åãå©çšããŠããããã§ãã ãªããå©çšããé
ç®ã«ãã£ãŠããŸã衚瀺ãããªãã£ããããã®ã§ãã®å Žåã¯ç·šéããŠèª¿æŽããŠå©çšããŸãããã ããã§ã¯æ°ã«ãªã£ãŠããã°ã©ããããããèŠãŠãããããšæããŸãïŒ æ£ã°ã©ã (Bar chart) ãã³ãã¬ãŒããå©çšããŠé©åœã«äœæãããµã³ãã«ããŒã¿ã®ååã«ããŽãªãšå£²äžã䜿ã£ãŠæ£ã°ã©ããéžãã§ã¿ãŸããã ãã³ãã¬ãŒãã䜿ãããšã§ã¯ã³ã¯ãªãã¯ã§æ£ã°ã©ããäœãããŸããïŒ åœããåã§ã¯ãããŸããèŠãç®ã¯æšæºã®æ£ã°ã©ããšå€ãããªãæãã§ããã ããŒãããã äŒå¡ã©ã³ã¯ãšå°åã®äŒå¡å¹³å幎霢ã䜿ã£ãŠãã³ãã¬ãŒãã䜿ã£ãŠã¿ãŸãããããŸãé
ç®ãéžã°ããªãã£ãããæåã§ç·šéãäœæããŠã¿ãŸããã çŸåšããŒããããã¯æšæºã°ã©ãã«ã¯ãªããã«ã¹ã¿ã ãã£ãŒãã®ã¿ã®æ©èœã«ãªããããã¡ãã䜿ãããšã«ãªãããã§ããã ããã«ãã£ãŒã ååã«ããŽãªãšå£²äžãå¹³åå䟡ãå¹³å顧客幎霢ãäœ¿ãæ£åžå³ã®ããã«ãã£ãŒããäœæããŠã¿ãŸããã 軞㮠scale ããããã£ã§å¹Žéœ¢ã®ã¹ã±ãŒã«ã30æ³ä»¥äžã«ããããšã§èŠãããããŠããŸãã ããããæšæºã®æ£åžå³ã§ã¯ãµã€ãºãªãã·ã§ã³ããªãã£ãããããã«ãã£ãŒãã¯äœããªããšæãããŸãã®ã§å©çšãããæ¹ã¯ãã¡ãã䜿ãããšã«ãªãããªãšæããŸãã 忣ç©ã¿äžãæ£ã°ã©ã(人å£ãã©ããã) 次ã¯ãã³ãã¬ãŒãã«ãªããã®ãäœã£ãŠã¿ãŸãã vega-liteã®exampleãçºããŠããŠæ°ã«ãªã£ã 人å£ãã©ããã ã§ãã ãµã³ãã«ã³ãŒããèŠããèŠãŸãã§äœã£ãŠã¿ããšãããããŸããâŠïŒ ãããã£ãæã®èŸŒãã ã°ã©ãã¯BIããŒã«ã§äœãçµéšããªãã£ãã®ã§äœãããã ãªãšæåãã¡ãããŸããããã ãããã£ããã£ãŒããäœããã®ã¯ã¡ãªããã§ããã Tableauã®ãªãã¡ã¬ã³ã¹ã©ã€ã³çãªå¹³åã©ã€ã³ æåŸã«æ£ã°ã©ãäžã«å¹³åã©ã€ã³ã 衚瀺 ãããexampleã詊ããŠã¿ãŸãããèŠæŠãã€ã€ã衚瀺ã§ããŸããã ãªãã ããã 䜿ãããšãããããªã©ã€ã³ã§ãã ã³ãŒãã®å·¥å€«ã®ä»æ¹ã«ãã£ãŠã¯ç®æšå€çã®ã©ã€ã³ãèšå®ã§ããã®ã§ã¯ãšæããŸãã æåŸã« æ°ã«ãªã£ãŠããã«ã¹ã¿ã ãã£ãŒãã®ããã€ãã®ã°ã©ããæ©èœãè§Šã£ãŠã¿ãŸããã Lightdashã¯ãŸã ãŸã æé·ã®æ®µéã§ä»ã®BIãšæ¯ã¹ãŠããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³ã®é¢ã§å®çŸã§ããªãããšããã£ããããŸããããã®ã«ã¹ã¿ã ãã£ãŒãæ©èœã䜿ãããšã§çããšããã«æãå±ãããæ©èœã ãªãšæããŸãã ããããªããUIã§ãœã¡ãœã¡ã£ãšã°ã©ããäœããããªBIããŒã«ã®æ¬æ¥ã®æäœãšæ¯ã¹ãããã¯ãé£ããéšåããããJSONã³ãŒããç·šéããŠäœãã®ã¯èŠåŽããé¢ããããŸãã®ã§ChatGPTå
ççã«ãæç€ºããã ããªããäœã£ãŠã¿ããšãããããããŸããã å
¬åŒãµã€ãã«ã¯ãµã³ãã«ã³ãŒããããã®ã§æµçšã§ããéšåãå€ããšæããŸãã ãŸããã®Lightdashã§ãã2025幎6æçŸåšã§ãé«é »åºŠã§ ã¢ããããŒã ãè¡ãããŠãããä»åŸãæ©èœãããã«å
å®ããŠãããšæããŸãããèªåèªèº«ãããªãæåŸ
ããŠããŸãïŒ Lightdashã®ãã£ãŒãæ©èœãæ°ã«ãªã£ãŠããæ¹ã
ã®åèã«ãªãã°å¹žãã§ãïŒ
2025幎æ°åãšããŠéçºæ¬éšã«é
å±ãããŸãããæ©æºå€ªéœã§ãã æ©éã§ããè¥æãšã³ãžãã¢ã®çãããã»ãã¥ãªãã£ãæèããŠã³ãŒãã£ã³ã°ã§ããŠããŸããïŒ ç§ã¯ã»ãŒãã£ãŒã«å
¥ããŸã§ã»ãŒæèããWebã¢ããªéçºãªã©è¡ã£ãŠããŸãã⊠ITæ¥çã«ãããŠã»ãã¥ãªãã£ã¯çç³»ãæç³»ã©ã¡ãã«è¡ã£ãŠãåã£ãŠãåãé¢ããªãè±èªã®ãããªéèŠãªååšã§ãã ãããªã»ãã¥ãªãã£ã®åŠç¿ãããããã«ããŠããŸããšãã©ããªã«ãããµãŒãã¹ãäœã£ããšããŠããæªæã®ããäººã®æã«ãã£ãŠå°ç¡ãã«ãããŠããŸãããšããããŸãã ããããããšãŠãéèŠãªåéã§ãããã»ãŒãã£ãŒã§ã¯æ°åç ä¿®ã®äžç°ãšããŠåº§åŠïŒã¯ãŒã¯ã·ã§ããïŒãã³ãºãªã³åœ¢åŒã§å®æœããã»ãã¥ãªãã£ç ä¿®ããããŸãã ãã®èšäºã®ååã§ã¯ç ä¿®ã§äœãåŠãã ã®ãã«ã€ããŠãåŸåã§ã¯åŠãã ããšãã©ã®ããã«æ¥åã§ã¢ãŠããããããã®ããã玹ä»ããŸãã ã¯ããã« ãã®èšäºã§äŒãããã㚠誰åãã®èšäºïŒ 座åŠïŒã¢ãžã£ã€ã«ãšè
åšã¢ããªã³ã°ã«ã€ã㊠ã¯ãŒã¯ã·ã§ããïŒè
åšã¢ããªã³ã°ãå®è·µïŒ 4ã€ã®åãã«å¯ŸããŠè¡ã£ãããš ã¹ããã1ïŒDFDã§ãç§ãã¡ã¯äœã«åãçµãã§ãããïŒããæç¢ºã«ãã ã¹ããã2ïŒSTRIDEã§ãäœãåé¡ã«ãªããããïŒããæŽãåºã ã¹ããã3 ïŒãªã¹ã¯ãããã§åªå
é äœãã€ããŠå¯Ÿçãèãã ã¹ããã4ïŒïŒïŒÎ (ãã©ã¹ïŒãã«ã¿)ã§æ¯ãè¿ãã 宿åŸã«ããŒã ããšã«çºè¡š ãã®ã¯ãŒã¯ã·ã§ããã§æããããš è匱æ§èšºæãã³ãºãªã³ïŒããã«ãŒã«ãªã£ãŠæ»æããŠã¿ã ããŒã¿ããŒã¹ã®æ
å ±ãæãåã£ãŠã¿ã SQLã€ã³ãžã§ã¯ã·ã§ã³ã®æ¬åœã®æããã è匱æ§èšºæãã³ãºãªã³ã§æããããš ã¢ãŠããããïŒã»ãã¥ãªãã£ç ä¿®ã§åŸãç¥èãå®è·µãžïŒ æ°åç ä¿®ãããžã§ã¯ãã«åãå
¥ãã â èšèšã®åå°ã§ããéæ©èœèŠä»¶ã«åæ â¡äœã£ãæ©èœã«ãæ»æãã仿ããŠã¿ã ãŸãšã ã¯ããã« ãã®èšäºã§äŒãããããš ã»ãŒãã£ãŒã®ã»ãã¥ãªãã£ç ä¿®ã®æŠèŠã«ã€ã㊠åŠãã ããšãã©ã®ããã«ä»äºã«çãããã®ã 誰åãã®èšäºïŒ ã»ãã¥ãªãã£ã®éèŠæ§ãããŸãèªèããŠããªãæ¹ïŒéçºè
ïŒ æ»æææ³ã®æŠèŠã¯ææ¡ããŠããããå
·äœçãªæ»æã®ã€ã¡ãŒãžãã€ããŠããªãæ¹ ã©ããªãšããã«è匱æ§ãæœãã§ããã®ãã€ã¡ãŒãžã§ããªãæ¹ åº§åŠïŒã¢ãžã£ã€ã«ãšè
åšã¢ããªã³ã°ã«ã€ã㊠ç ä¿®ã®ååã§ã¯ããŸã ã¢ãžã£ã€ã«éçº ã«ã€ããŠåŠã³ããã®åŸã« è
åšã¢ããªã³ã° ãåŠã³ãŸããã ç§èªèº«ããã¢ãžã£ã€ã«éçºããšãããã®ã¯ç¥ã£ãŠããã®ã§ãããããªãã»ãã¥ãªãã£ã®ç ä¿®ãªã®ã«ããªãã¢ãžã£ã€ã«éçºã®è©±ããå§ãŸããã ããïŒããšããã®ãæ£çŽãªææ³ã§ããã ããã¯ãã¢ãžã£ã€ã«éçºã®åŒ·ã¿ã§ãããã¹ããŒããããã»ãã¥ãªãã£å¯Ÿçã®é
ãã§åŒ±ç¹ã«å€ããããã§ããéçºçµç€ã§ã®èšèšã®ä¿®æ£ã¯ãå€å€§ãªææ»ããšã³ã¹ããããã£ãŠããŸããŸãã ããã§éèŠãªã®ããã»ãã¥ãªãã£å¯Ÿçãéçºåæããè¡ããã·ããã¬ããããšããèãæ¹ã§ãã éçºã®ã¹ããŒããšå®å
šæ§ãäž¡ç«ãããããã«ã¯ããŸããã®åå°ãšãªãã¢ãžã£ã€ã«éçºã®å
šäœåãçè§£ããããšãäžå¯æ¬ ã ã£ãã®ã ãšãæ·±ãçŽåŸããŸããã åºå
žïŒSecurity Compass - How to Sell Security Training Costs Internally https://www.securitycompass.com/blog/how-to-sell-training-costs-internally-2/ ïŒ2025幎7æ30æ¥ã¢ã¯ã»ã¹ïŒ â»ãèšè𿮵é(é)ãã§äžå
·åãèŠã€ããŠä¿®æ£ããã³ã¹ããåºæºã®1ãšããæããéçºæ®µé(æ©)ããããã¹ã段é(ç°)ããããªãªãŒã¹æ®µé(é»)ãããããã§å¯Ÿå¿ããæã®ã³ã¹ãã®ãããæ¹ è
åšã¢ããªã³ã°ãšã¯ãã·ã¹ãã ã«å¯ŸããŠãã©ã®ããã«æ»æãçºçããããããäœç³»çã«åæããå
·äœçãªæ»æçµè·¯ããªã¹ã¯ãç¹å®ããããã®ãªã¹ã¯åæææ³ã§ãããã·ããã¬ãããå®è·µããããã®åŒ·åãªãã©ã¯ãã£ã¹ïŒå®è·µææ³ïŒã®äžã€ã§ãã ãã®ææ³ã®åŒ·ã¿ã¯ãèšè𿮵éã§ æœåšçãªåé¡ ã æ©æã«çºèŠã»ä¿®æ£ ã§ãããããåŸã®å·¥çšã§ã®ä¿®æ£ã³ã¹ããæå°éã«æããããšãã§ãããšããããšã«å ãããããŒã å
ã®å
±éçè§£ã圢æã§ããããšãããããŸãã DFDïŒããŒã¿ãããŒå³ïŒã®ãããªã¢ãã«ã䜿ãããšã§ãããŒã å
šå¡ãåãå³ãèŠãŠåãç®ç·ã§ãã·ã¹ãã ãã©ã®ããã«æ»æãããããããè°è«ã§ããããã«ãªããŸãã ç ä¿®ãåããåã®ç§ã¯ãæ£çŽãªãšãããã»ãã¥ãªãã£å¯ŸçïŒå®è£
段éã§ã®ã³ãŒãã£ã³ã°ã«ãŠå¯Ÿçããšããã€ã¡ãŒãžã§ããã ãããããã®ç ä¿®ãéããŠã·ã¹ãã ã®èšèšãã®ãã®ã«è匱æ§ãæœãå¯èœæ§ããããŒã å
šäœã§è
åšã«ã€ããŠå¯Ÿè©±ããå
±éèªèãæã€ããšã®éèŠæ§ãåŠã³ãŸããã ã»ãã¥ãªãã£ã¯å°éå®¶ã ãã®éããä»äºã§ã¯ãªããéçºã«é¢ããå
šå¡ã§å¯Ÿè©±ããäœãäžããŠããããšãéèŠã ãšãã»ãã¥ãªãã£ã«å¯Ÿããèãæ¹ã倧ããå€ããçµéšãšãªããŸããã ã¯ãŒã¯ã·ã§ããïŒè
åšã¢ããªã³ã°ãå®è·µïŒ 座åŠã®åŸã¯ãããŒã ã«åãããŠè
åšã¢ããªã³ã°ã®ã¯ãŒã¯ã·ã§ãããäœéšããŸããã 課é¡ã¯ãã¿ã¹ã¯ç®¡çWebã¢ããªïŒè匱æ§èšºæãã³ãºãªã³ã§çšããã Bad Todo List ãïŒã®èŠä»¶ãããŒã¹ã«ãã©ã®ãããªè匱æ§ãããã®ãããè
åšã¢ããªã³ã°ã®ã4ã€ã®åããã«æ²¿ã£ãŠèããŠãããšãããã®ã§ããã ã¿ã¹ã¯ç®¡çWebã¢ããªïŒè匱æ§èšºæãã³ãºãªã³ã§çšãããBad Todo ListãïŒã®èŠä»¶ïŒç ä¿®è³æããæç²ïŒ ã¯ãŒã¯ã·ã§ããã®æµãã«ã€ããŠã¯ã ã»ãŒãã£ãŒã®è
åšã¢ããªã³ã°ããŒã¹ã®ã»ãã¥ã¢éçºãã¬ãŒãã³ã° ãã®èšäºãã確èªãã ããã 4ã€ã®åãã«å¯ŸããŠè¡ã£ãããš ã¹ããã1ïŒDFDã§ãç§ãã¡ã¯äœã«åãçµãã§ãããïŒããæç¢ºã«ãã è
åšã¢ããªã³ã°ã®æåã®åãããç§ãã¡ã¯äœã«åãçµãã§ãããïŒããæç¢ºã«ãããããä»åã¯äžè¬çã«äœ¿ããããDFD (ããŒã¿ãããŒãã€ã€ã°ã©ã )ããçšããŠã·ã¹ãã ã®å
šäœåãåæããŸããã DFDã®èŠçŽ ïŒç ä¿®è³æããæç²ïŒ DFDã¯ãã·ã¹ãã ã«ãããããŒã¿ã®ãæµãããšãåŠçããèŠèŠçã«è¡šçŸããå³ã§ã詳现ãªåäœ(How)ããããäœãããã®ã(What)ããæããã«ããããšã«é·ããŠããŸãã DFDã®ç¢å°ã¯ãããŸã§ããŒã¿ã®æµãïŒData FlowïŒã®ã¿ãèšè¿°ããªããã°ãªãããæžãå§ãã¯ãã®ã«ãŒã«ã«ãªããªãæ
£ããŸããã§ããã ã€ããããŒã¿ãååŸãããªã¯ãšã¹ããã®ãããªãåŠçã®å¶åŸ¡ã«é¢ããç¢å°ãäœåºŠãæžãããã«ãªããèŠåŽããŸããã ã§ãããBad Todo Listã®èŠä»¶ããäžèšã®ãããªDFDãäœæããŠãããšãèŠä»¶ãèŠãã ãã§ã¯æ°ã¥ããªãã£ãèŠç¹ãæžå¿µç¹ã次ã
ãšæµ®ãã³äžãã£ãŠããŸããã ã¹ããã2ïŒSTRIDEã§ãäœãåé¡ã«ãªããããïŒããæŽãåºã 次ã«ããäœãåé¡ã«ãªããããïŒããšããåãã«çããããã ãSTRIDEã ãšãããã¬ãŒã ã¯ãŒã¯ã䜿ã£ãŠãèµ·ãããå°ãããšïŒãªã¹ã¯ïŒããæŽãåºããŸããã STRIDEã¯ã以äžã®6ã€ã®èгç¹ããè
åšãåé¡ãããåãã§ãã STRIDEã®èª¬æïŒç ä¿®è³æããæç²ïŒ ãã®ãã¬ãŒã ã¯ãŒã¯ãçšããããšã§ãæ»æè
ã®åæ©ãç®çãšãã£ããããé«ãèŠç¹ããäœç³»çã«è
åšãåæããããšãã§ããŸãã äœæããDFDã®åæ©èœãããŒã¿ã®æµãã«å¯ŸããŠã ããŠãŒã¶ãŒæ
å ±ç»é²ã®éã«ã倧éã®ç»é²ãªã¯ãšã¹ããéãããŠãããšãããŒã¿ããŒã¹ãç Žå£ãããå¯èœæ§ããããã D(ãµãŒãã¹æåŠ) ãåœãŠã¯ãŸãã ãã¿ã¹ã¯ã®ç·šéã®éã«ãã¿ã¹ã¯ãåæã«æžãæããããããæ¶ããããããå¯èœæ§ããããã S(ãªãããŸã )ãš T(æ¹ãã) ãåœãŠã¯ãŸãã ãªã©ãšSTRIDEã®èгç¹ãåœãŠã¯ããŠããããšã§ãå
·äœçãªãªã¹ã¯ã次ã
ãšèŠã€ããããšãã§ããŸããã ç§ãäœã£ãŠããã¢ããªãäžã®äžã«å
¬éããå Žåããããªé¢šã«æ»æè
ã®èŠç¹ã§èŠãããŠããã®ãããããªããšæããšãå°ããã£ãšããŸããã ã¹ããã3 ïŒãªã¹ã¯ãããã§åªå
é äœãã€ããŠå¯Ÿçãèãã å€ãã®ãªã¹ã¯ãæŽãåºããšã次ã«ãã§ã¯ãããã«å¯ŸããŠäœãããã®ãïŒããèããŸãã ãããããã¹ãŠãäžåºŠã«å¯Ÿçããããšãããšãæ¬åœã«å±éºãªãªã¹ã¯ãžã®å¯Ÿå¿ãé
ããŠããŸãå¯èœæ§ããããŸãã ããã§ã ããªã¹ã¯ãããã ã䜿ãã察çã®åªå
é äœã決ããŸããã ç ä¿®ã§èª¬æããããªã¹ã¯ãããïŒç ä¿®è³æããæç²ïŒ ããã¯ã ããªã¹ã¯ïŒçºç確ç à 圱é¿åºŠã ãšããèãæ¹ã«åºã¥ãããçºçããããããšãçºçããå Žåã®è¢«å®³ã®å€§ãããã§è©äŸ¡ããåªå
é äœãã€ããŠããææ³ã§ãã ä»åã®èŠä»¶ã§ã¯ãã¿ã¹ã¯ã®æ
å ±ãªã©ãä¿åããããŒã¿ããŒã¹ã«é¢ããæ»æãäžçªã圱é¿åºŠããé«ãããçºç確çãã«é¢ããŠãæ»æããããç®æã§ãããšèããŸããã ãã£ãŠããããŒã¿ããŒã¹ã«å€§éã®ç»é²åŠçãè¡ãããããŒã¿ããŒã¹ãç Žå£ãããããšãããªã¹ã¯ããçºç確çãã圱é¿åºŠããšãã« 5 ãšèšå®ããäžçªåªå
床ãé«ããã®ãšããŸããã ãã®ã¹ããããéããŠããã¿ããã«ãã¹ãŠã®ãªã¹ã¯ã«å¯Ÿçããã®ã§ã¯ãªããæãå±éºãªãªã¹ã¯ãã察åŠãããšãããçŸå®çãã€åççãªææ³ãåŠã³ãŸããã ã¹ããã4ïŒïŒïŒÎ (ãã©ã¹ïŒãã«ã¿) ã§æ¯ãè¿ãã åã¹ããªã³ãã®æåŸã«ã¯ã ãïŒïŒÎ (ãã©ã¹ïŒãã«ã¿)ã ãšããææ³ã§æ¯ãè¿ããè¡ããŸããã ããã¯ã掻åã®è¯ãã£ãç¹ïŒãã©ã¹ïŒãšæ¹åç¹ïŒãã«ã¿ïŒãåºãåãææ³ã§ãã ãïŒïŒÎ (ãã©ã¹ïŒãã«ã¿)ãã®ã¢ãŠããããã€ã¡ãŒãžïŒç ä¿®è³æããæç²ïŒ æåã®ã¹ããªã³ãã§ãç§ãã¡ã¯ã¿ã¹ã¯ã®ã远å ããç·šéããåé€ããããããå¥ã®ããã»ã¹ãšããŠDFDã«æžãåºããŸãããããããçµæçã«3ã€ã®ããã»ã¹ã«ç¹ããããŒã¿ã®æµãã¯ãã»ãŒåãå
容ã«ãªã£ãŠããŸã£ãã®ã§ãã ãã®çµæãããç§ãã¡ã¯ã ããã»ã¹ã®ç²åºŠããã¡ããšæ±ºããã«æžãå§ããŠããŸã£ã ããšããæ¹åç¹ïŒãã«ã¿ïŒãèŠã€ãåºããŸããã ãã®æ°ã¥ããå
ã«ã次ã®ã¹ããªã³ãã§ã¯ãŸããããŒã¿ã®æµããåãåŠçã¯ãäžã€ã®ããã»ã¹ã«ãŸãšãããããšæ±ºããŸããã ãã®çµæãDFDã®ç²åºŠãçµ±äžãããŠããã»ã¹ãæŽçãããã ãã§ãªããåããªã¹ã¯ã«å¯Ÿããä»ç®ãäžã€ã«éçŽã§ããæ Œæ®µã«èŠãããå³ã«æ¹åããããšãã§ããã®ã§ãã ãã®æ¯ãè¿ãããã£ãããšã§ãä»åã®ã¹ããªã³ãã§è¯ãã£ãããšã¯åŒãç¶ãç¶ç¶ããæ¹åç¹ã¯æ¬¡åã®ã¹ããªã³ãã§æèããŠè¡åããããšãã§ãããããã¢ãžã£ã€ã«éçºãšãšãŠãçžæ§ã®ããææ³ã ãšæããŸããã 宿åŸã«ããŒã ããšã«çºè¡š ã¯ãŒã¯ã·ã§ããã®æåŸã«ããŒã ããšã«äœæããDFDãããããçºè¡šããŸããã ããã»ã¹ã®ç²åºŠã®éãããŠãŒã¶ãŒæš©éããšã«è¡šãåããŠåæããŠããããªã©ãèãæ¹ã®éããããã¯ã€ãããŒããä»ç®ã®äœ¿ãæ¹ãåããŒã ããããåæ§ããããå
šã系統ã®éãDFDã宿ããŠããã®ã§éåžžã«é¢çœãã£ãã§ãã ããŒã ã«ãã£ãŠã¢ãããŒããç°ãªãã倿§ãªèŠç¹ã«è§Šããããšãã§ããŸããã 3ããŒã ã®ãã¯ã€ãããŒã ãã®ã¯ãŒã¯ã·ã§ããã§æããããš ãã®äžé£ã®ã¯ãŒã¯ã·ã§ãããéããŠãè
åšã¢ããªã³ã°ãè¡ãäžã§äŸ¿å©ãªã¯ãŒã¯ãããŒãå€ãååšãããããçšããããšã«ãã£ãŠæåããã§ã¯æ°ã¥ããªãã£ãè匱æ§ããªã¹ã¯ã®å€§ããã«æ°ã¥ãããšãã§ãããããã¯ãŒã¯ãããŒã®æçšæ§ãæ¹ããŠæããŸããã äžæ¹ã§ãããã¬ãŒã ã¯ãŒã¯éãã«ããã°å®å¿ããšãããçœ ãã«é¥ã£ãŠã¯ãããªãããšããè¬åž«ã®éåããã®èšèãå°è±¡ã«æ®ã£ãŠããŸãã æãéèŠãªã®ã¯ããã¬ãŒã ã¯ãŒã¯ãåèã«ãã€ã€ããããŒã ã顧客ãšã®å¯Ÿè©±ãç¶ããåŠã³ãæ¹åãç¶ããããšãªã®ã ãšå®æããŸããã è匱æ§èšºæãã³ãºãªã³ïŒããã«ãŒã«ãªã£ãŠæ»æããŠã¿ã ç ä¿®ã®æåŸã«ãå®éã«è匱ãªWebã¢ããªã±ãŒã·ã§ã³ïŒãããã¢ããªïŒã«å¯ŸããŠæ»æã仿ãããã³ãºãªã³ãè¡ããŸããã ããŒã«ã«ãããã·ãBurp Suite Community Editionãã䜿ããããã«ãŒãå®éã«è匱æ§ãã©ã®ããã«èŠã€ããã©ã®ããã«æ»æããã®ããäœéšããŸããã ããã§ã¯ã代衚çãªæ»æã§ãã SQLã€ã³ãžã§ã¯ã·ã§ã³ ãã©ã®ããã«äœéšãããã玹ä»ããŸãã SQLã€ã³ãžã§ã¯ã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ãæ³å®ããªãSQLæãæå³çã«å®è¡ãããããŒã¿ããŒã¹ãäžæ£ã«æäœããæ»æã§ãã (åºå
ž)IPA - 1. å®å
šãªãŠã§ããµã€ãã®äœãæ¹ - 1.1 SQLã€ã³ãžã§ã¯ã·ã§ã³ https://www.ipa.go.jp/security/vuln/websecurity/sql.html ïŒ2025幎7æ30æ¥ã¢ã¯ã»ã¹ïŒ ä»åã¯å
ã®ã¯ãŒã¯ã·ã§ããã§ãªã¹ã¯åæãããã Bad Todo List ããšããè匱æ§ãæã£ãã¢ããªã±ãŒã·ã§ã³ã§äœéšããŸããã æ³šæâ ïž æ¬èšäºã§ç޹ä»ããŠããå
容ã¯ãããŸã§åŠç¿ç®çã§ãç¹å¥ãªèš±å¯ã®ããšå®å
šãªç°å¢äžã§å®æœãããã®ã§ãã èš±å¯ãªã第äžè
ã®ãŠã§ããµã€ããã·ã¹ãã ã«å¯ŸããŠãè匱æ§ã詊ããããªè¡çºãè¡ãããšã¯æ³åŸã§åºãçŠããããŠãããŸãã®ã§ããæ³šæãã ããã ãµã€ãã«ã¢ã¯ã»ã¹ããŠã¿ããšã以äžã®ãããªããæ®éã®Todoã¢ããªã®ç»é¢ã衚瀺ãããŸããããã®ãµã€ãã«ã¯ããããšããã«è匱æ§ãæœãã§ããŸãã Bad Todo Listã®ã¿ã¹ã¯äžèЧç»é¢ ããŒã¿ããŒã¹ã®æ
å ±ãæãåã£ãŠã¿ã è匱æ§ã®ããå
¥åãã©ãŒã ã«ã ããœã³ã³' OR 'a'='a ããšå
¥åããŠã¿ãŸãã ãããå
¥åãããšãããã°ã©ã ã®å
éšã§ã¯SQLæã次ã®ããã«çµã¿ç«ãŠãããŸãã ... AND todo LIKE ' ããœã³ã³ ' OR ' a ' = ' a ' ; ãã®åœä»€æã¯ãããŒã¿ããŒã¹ã«å¯ŸããŠã Todoã«ãããœã³ã³ããšæžãããŠãã ããŸãã¯(OR)ã ãaããšãaãã¯çãã ããšããæ¡ä»¶ã§ããŒã¿ãèŠæ±ããŸãã ã 'a'='a' ãã¯åžžã«çïŒtrueïŒãªã®ã§ãçµæãšããŠã ãã¹ãŠã®æ¡ä»¶ãç¡èŠããŠãããŒã¿ããŒã¹ã«ããæ
å ±ããã¹ãŠè¡šç€ºãã ããšããåœä»€ã«å€ãã£ãŠããŸãã®ã§ãã ãã®çµæã以äžã®ç»åã®ããã«ãå
¬éãéå
¬éã®èšå®ïŒç»åå³åŽïŒã«é¢ä¿ãªããã¹ãŠã®ããŒã¿ããŒã¹ã®æ
å ±ã衚瀺ãããèŠããŠã¯ãããªãéèŠãªæ
å ±ãèŠããŠããŸããŸããæããã⊠Bad Todo Listã§SQLã€ã³ãžã§ã¯ã·ã§ã³ãæ€èšŒããçµæç»é¢ SQLã€ã³ãžã§ã¯ã·ã§ã³ã®æ¬åœã®æããã 衚瀺ãããŠããæ
å ±ããã¹ãŠæãåããã ãã§ãååã«æãããã§ãããSQLã€ã³ãžã§ã¯ã·ã§ã³ã®å±éºæ§ã¯ ããã ãã§ã¯ãã¿ãŸããã æ»æè
ã¯ããã®è匱æ§ãå©çšããŠããã«æªè³ªãªæ»æã仿ããããšãã§ããŸãã å人æ
å ±ã®çªå UNION ãšãã£ãç¹æ®ãªåœä»€ãçµã¿åãããããšã§ãTodoãªã¹ãã ãã§ãªããã·ã¹ãã ã«ç»é²ãããŠããå
šãŠãŒã¶ãŒã®IDãã¡ãŒã«ã¢ãã¬ã¹ãããã«ã¯ãã¹ã¯ãŒãæ
å ±ãŸã§çã¿åãããšãå¯èœã§ãã ããŒã¿ã®æ¹ãããšåé€ æ
å ±ãçãã ãã§ãªããããŒã¿ããŒã¹å
ã®æ
å ±ãèªç±ã«æžãæããããå
šãŠã®ããŒã¿ãåé€ãããããããšãã§ããŠããŸããŸãã ãµãŒããŒã®ä¹ã£åã ããŒã¿ããŒã¹ã®èšå®ã«ãã£ãŠã¯ãSQLã€ã³ãžã§ã¯ã·ã§ã³ãè¶³ãããã«ãæçµçã«WebãµãŒããŒãã®ãã®ãä¹ã£åãããŠããŸãã±ãŒã¹ãããããŸãã ãã®ããã«ããã£ãäžã€ã®å
¥åæ¬ã®äžåãããã·ã¹ãã å
šäœãæºãããç倧ãªè¢«å®³ã«ç¹ãããããªãã®ããSQLã€ã³ãžã§ã¯ã·ã§ã³ã®æ¬åœã®æããããªã®ã§ãã è匱æ§èšºæãã³ãºãªã³ã§æããããš ãã®ãããªåœ¢ã§æ§ã
ãªæ»æææ³ãå®è·µçã«åŠã³ãŸããã SQLã€ã³ãžã§ã¯ã·ã§ã³ã ãã§ãæ·±å»ãªè¢«å®³ã«ã€ãªããã®ã«ãWebã¢ããªã±ãŒã·ã§ã³ã«ã¯ä»ã«ãç¡æ°ã®æ»æçµè·¯ãæœãã§ãããšããäºå®ã«ããäžäœã©ãããã°ãããªæ»æãæãã€ãã®ãããšããã®çºæ³åã«å§åãããã°ããã§ããã ãããŸã§ã¯ãã©ãããã°åããããšãããäœãåŽãã®èŠç¹ã§ããã³ãŒããèŠãŠããŸããã§ãããããã®ç ä¿®ã§ã¯ãã©ãããã°å£ãããããšãããæ»æãããåŽãã®èŠç¹ãåããŠåŸãããšãã§ããŸããã ã¢ãŠããããïŒã»ãã¥ãªãã£ç ä¿®ã§åŸãç¥èãå®è·µãžïŒ ããããã¯ãã»ãã¥ãªãã£ç ä¿®åŸã«ç§ãã©ã®ãããªã¢ãŠãããããè¡ã£ããã玹ä»ããŸãã æ°åç ä¿®ãããžã§ã¯ãã«åãå
¥ãã çŸåšãç§ãã¡æ°åãšã³ãžãã¢ã¯ç€Ÿå
ã®èª²é¡ã解決ããã·ã¹ãã ãéçºãããšããç ä¿®ã«åãçµãã§ããã®ã§ãããããã§ä»åã®ã¯ãŒã¯ã·ã§ããããã³ãºãªã³ã§åŠãã 察çãçã蟌ã¿ãŸããã â èšèšã®åå°ã§ããéæ©èœèŠä»¶ã«åæ ãŸãããããžã§ã¯ãã®èšèšã®åå°ãšãªãéæ©èœèŠä»¶ã«ãä»åã®ç ä¿®ã§åŠãã æ»æææ³ããå®éã«äœãã·ã¹ãã ã§ã©ããªè匱æ§ãèããããããæŽãåºããããã«å¯Ÿãã察çãå
·äœçã«å®çŸ©ããŸããã åé¡ é
ç® å¯Ÿçå
容 ã¢ã¯ã»ã¹ã»å©çšå¶é ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®ã¢ã¯ã»ã¹å¶é SlackOAuthãéããŠãèš±å¯ãããå©çšè
ïŒ@safie.jpã¢ã«ãŠã³ãïŒã®ã¿ãã·ã¹ãã ãå©çšã§ããããšã ã¢ã¯ã»ã¹ã»å©çšå¶é å®å
šãªèªèšŒã»ã»ãã·ã§ã³ç®¡ç JWTãå©çšãããµãŒããŒåŽã§é»å眲åãæ€èšŒããããšã§ããŒã¿ã®å®å
šæ§ãæ
ä¿ããã è匱æ§å¯Ÿç SQLã€ã³ãžã§ã¯ã·ã§ã³å¯Ÿç DBãžã®åãåããã¯ãã¬ãŒã¹ãã«ããçšããäžæ£ãªSQLå®è¡ãé²åŸ¡ããã è匱æ§å¯Ÿç ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒå¯Ÿç ãŠãŒã¶ãŒå
¥åå€ãWebããŒãžã«è¡šç€ºããéã¯ãé©åã«ãšã¹ã±ãŒãåŠçãè¡ãã è匱æ§å¯Ÿç ã¯ãã¹ãµã€ããªã¯ãšã¹ããã©ãŒãžã§ãªïŒCSRFïŒå¯Ÿç ããŒã¯ã³ãçšããŠãæå³ãããŠãŒã¶ãŒããã®ãªã¯ãšã¹ãã§ããããšãæ€èšŒããã ãã®ããã«éçºã®åææ®µéããã»ãã¥ãªãã£ãèŠä»¶ãšããŠå®çŸ©ããããšã§ãåŸå·¥çšã§ã®ææ»ããé²ãããŸãã«ã»ãã¥ãªãã£ç ä¿®ã§åŠãã ãã·ããã¬ãããã®èãæ¹ãå®è·µããããšãã§ããŸããã â¡äœã£ãæ©èœã«ãæ»æãã仿ããŠã¿ã 次ã«ãå®çŸ©ããéæ©èœèŠä»¶ã®äžã€ããã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®ã¢ã¯ã»ã¹å¶éããå®è£
ããå®éã«ãã¹ããè¡ããŸããã ãã®æ©èœã¯ãèš±å¯ããããã¡ã€ã³ïŒ@safie.jpïŒä»¥å€ã®ã¢ã«ãŠã³ãã§ã¯ãã°ã€ã³ã§ããªãããã«ãããã®ã§ãã ç ä¿®ã§ãäžè©±ã«ãªã£ãè¬åž«ã®éåããã«ååããé¡ãããè匱æ§èšºæã§äœ¿ã£ããBurp SuiteããçšããŠãå€éšã®ã¡ãŒã«ã¢ãã¬ã¹ã§ãã°ã€ã³ã詊ã¿ãæ¬äŒŒçãªæ»æã仿ããŠããããŸããã ãæ¬åœã«é²ããŠããã®ã ãããïŒããšããæŒ ç¶ãšããäžå®ããBurp Suiteã®ç»é¢ã§ã©ã®ãããªãªã¯ãšã¹ããé£ãã§ããŠãã©ã®ããã«ããŒã¿ãåŠçãããã©ã®ããã«å€éšããã®ã¡ãŒã«ã¢ãã¬ã¹ãã¯ããããŠããããå¯èŠåã§ããèšèšããã»ãã¥ãªãã£æ©èœã«èªä¿¡ãæã€ããšãã§ããŸããã å®éã®æ€èšŒã®æ§å ãŸãšã ä»åã®ã»ãã¥ãªãã£ç ä¿®ã§ã¯ã座åŠã§ã®ã€ã³ãããã ãã§ãªããè
åšã¢ããªã³ã°ã¯ãŒã¯ã·ã§ãããè匱æ§èšºæãã³ãºãªã³ãšãã£ãå®è·µçãªæŒç¿ãéããŠãã»ãã¥ãªãã£ã®ç¥èãæ·±ãçè§£ããããšãã§ããŸããã ç¹ã«ãå®éã«æãåãããŠæ»æè
ã®èŠç¹ãäœéšããããšã§ããããŸã§æŒ ç¶ãšããŠããè
åšããå
·äœçãªã€ã¡ãŒãžïŒåæïŒãšããŠæŽããããã«ãªã£ãã®ãäžçªã®åç©«ã ãšæããŠããŸãã ãã®ç ä¿®ã§åŸãåŠã³ã掻ãããä»åŸã®éçºæ¥åã§ã¯éçºåææ®µéããåžžã«ã»ãã¥ãªãã£ãæèããå®å
šãªãããã¯ãäœãã«è²¢ç®ããŠãããããšæããŸãã 25幎床æ°åç ä¿®ã«é¢ããèšäºã¯ãã¡ããã芧ãã ããã 2025å¹Žãæ°åãšã³ãžãã¢ç ä¿®ã¯ãããŸãã NotionååŠè
ã®ããã®ã·ã§ãŒãã«ããæŽ»çšè¡ïŒæ¥åå¹çãäžããç¬¬äžæ© 100人ããããžã¡ã³ãããææ®è
ã æ°åã§ææŠãããäžç¢ºå®æ§ããšåãåãããŒã ãã«ãã£ã³ã° æ°åäžå¹Žç®ã®ãšã³ãžãã¢ãæããããã¬éçºã§èŠããããŒã ã®âæé·â ãŒãããåŠãã ããã³ããšã³ãå®è£
æ¯æ¥ã®æ¥å ±å ±åãã¯ã³ãã¿ã³ã§ ããã«ãŒã®èŠç¹ã身ã«ä»ããïŒæ°åãåŠãã ã»ãã¥ãªãã£ç ä¿® â æ¬èšäº
ã¯ããã« ããã«ã¡ã¯ïŒã»ãŒãã£ãŒã§ãµã€ããŒã»ãã¥ãªãã£ãæ
åœããŠããéåã§ãã 以åã®ããã°ã§ã¯ã ã»ãŒãã£ãŒã®ãµã€ããŒã»ãã¥ãªãã£æŠç¥ã®äœãæ¹ ããã ã»ãŒãã£ãŒã®ã»ãã¥ãªãã£ããŒã ã¥ãã ããšãã£ãããŒãã§ãç§ãã¡ã®åãçµã¿ã玹ä»ãããŠããã ããŸããã ä»åã¯ããã®ãµã€ããŒã»ãã¥ãªãã£æŠç¥ã®æã¡æã®äžã€ã§ãããã»ãã¥ãªãã£ã¯ã¿ããªã®ä»äºããå®çŸããããã®ãã¬ãŒãã³ã°ã®å®éšãšããŠãã¢ãžã£ã€ã«è
åšã¢ããªã³ã°ãããŒã¹ã«ãããæ°åãšã³ãžãã¢åãã®ã»ãã¥ãªãã£ç ä¿®ãã宿œããŸããã®ã§ããã®æ§åãã玹ä»ããŸãã ãã®èšäºãããšã³ãžãã¢ãšããŠã»ãã¥ãªãã£ã¹ãã«ãé«ãããæ¹ã瀟å
ã§ã®ã»ãã¥ãªãã£ç ä¿®ãäŒç»ãããŠããæ¹ããããŠè
åšã¢ããªã³ã°ã«èå³ãããæ¹ã«ãšã£ãŠãå°ãã§ãåèã«ãªãã°å¬ããã§ãã ãªããæ¬èšäºã¯è¬åž«ã®ç§ç®ç·ã®èšäºã§ãã åè¬çã®æ°åãšã³ãžãã¢æ©æºããã®åè¬çç®ç·ã®èšäº ãå
¬éãããŠãŸãã®ã§ãåãããŠã確èªãã ããïŒ ã¯ãã㫠倧åã«ãããã®ã¯ãåŠç¿å®ççã ã³ã³ã»ããã¯ãã¢ãžã£ã€ã«è
åšã¢ããªã³ã°ã ç ä¿®ã®å
šäœå ã¢ãžã£ã€ã«è
åšã¢ããªã³ã°ïŒåº§åŠïŒã®å
容 è
åšã¢ããªã³ã°ã¯ãŒã¯ã·ã§ããïŒã°ã«ãŒãèšè°ïŒã®é²ãæ¹ è匱æ§èšºæãã³ãºãªã³ïŒèªãäœéšããïŒã®é²ãæ¹ ãã£ãŒãããã¯ïŒå¹ææ€èšŒïŒ ã¢ãžã£ã€ã«è
åšã¢ããªã³ã°ïŒåº§åŠïŒã®ã¢ã³ã±ãŒãçµæ è
åšã¢ããªã³ã°ã¯ãŒã¯ã·ã§ããïŒã°ã«ãŒãèšè°ïŒã®ã¢ã³ã±ãŒãçµæ è匱æ§èšºæãã³ãºãªã³ã®ã¢ã³ã±ãŒãçµæ ãŸãšã 倧åã«ãããã®ã¯ãåŠç¿å®ççã çããã¯ãç ä¿®ã§åŠãã å
容ãã©ãããã身ã«ã€ããŠããããæèããããšã¯ãããŸããïŒ ã©ãŒãã³ã°ãã©ãããã«ãããšããã è¬çŸ©ãèãã ãã®ç ä¿®ã§ã¯ãåŠç¿å
容ã®å®ççã¯ããã5%ã ãšèšãããŠããŸãããã£ããã®ç ä¿®ããããã§ã¯ãã£ãããªãã§ãããã (åºå
ž)ãã£ãªã¢æè²ã©ã - å¹³ååŠç¿å®ççãåäžãããã©ãŒãã³ã°ãã©ãããããšã¯ïŒïŒ https://career-ed-lab.mynavi.jp/career-column/707/ ïŒ2025幎7æ25æ¥ã¢ã¯ã»ã¹ïŒ ããã§ä»åã®ç ä¿®ã§ã¯ãåŠç¿å®ççãããé«ããšãããã ã°ã«ãŒãèšè° (50%) ããšã èªãäœéšãã (75%) ããæŽ»åã®äžå¿ã«æ®ããåŠãã ç¥èããã£ãããšèº«ã«ã€ãããã«èšèšããŸããã ã³ã³ã»ããã¯ãã¢ãžã£ã€ã«è
åšã¢ããªã³ã°ã ä»åã®ç ä¿®ã®ã³ã³ã»ããã¯ã ã¢ãžã£ã€ã«è
åšã¢ããªã³ã° ãã§ãã ããªãã»ãã¥ãªãã£ç ä¿®ã§ã¢ãžã£ã€ã«ïŒããšæããããããããŸããã ãã®çç±ã¯ãã¢ãžã£ã€ã«éçºãå€ãã®ãšã³ãžãã¢ã«ãšã£ãŠåŠã³ããããŒãã§ããããšã«å ãããã®äŸ¡å€èгãååããè
åšã¢ããªã³ã°ã广çã«å®è·µããããã®èãæ¹ãšéåžžã«èŠªåæ§ãé«ãããã§ããäŸãã°ãã¿ã€ã ããã¯ã¹ã»ãã©ã³ãã³ã°ã»ãµããããã®ãããªã¢ãžã£ã€ã«ã®ãã©ã¯ãã£ã¹ã掻çšããããšã§ã 察話ãäžå¿ãšããè
åšã¢ããªã³ã° ããæ¥œãã¿ãªããå®è·µã§ãããšèããŸããã ã§ã¯ããã®ãè
åšã¢ããªã³ã°ããšã¯äžäœäœãªã®ã§ããããã è
åšã¢ããªã³ã°ã¯ãéçºããã·ã¹ãã ã«ã©ã®ãããªã»ãã¥ãªãã£äžã®è
åšïŒïŒæªãããšãèµ·ããå¯èœæ§ïŒãæœãã§ãããããèšè𿮵éã§æŽãåºãããã®ãªã¹ã¯åæææ³ã§ãããèµ·ãããå°ãããšã¯äœãïŒããšããèŠç¹ã§ã·ã¹ãã ã®åŒ±ç¹ãæ¢ããäºåã«å¯Ÿçãè¬ããããšãç®çãšããŸãã ãã®ããã«ãè
åšã¢ããªã³ã°ã¯èšè𿮵éã§ã»ãã¥ãªãã£ãªã¹ã¯ãäœç³»çã«åæã§ãããããéçºè
ãåŠã¶ã¹ããã©ã¯ãã£ã¹ãšããŠæé©ã§ãããNIST SP800-218ïŒSecure Software Development FrameworkïŒãããOWASP SAMM 2.0ãã®ãããªãã¬ãŒã ã¯ãŒã¯ã§ãæšå¥šãããŠãã ãããããã®éçºè
ã«ãšã£ãŠå¿
é ã®ã¹ãã«ãšèšããã§ãããã (åºå
ž) NIST Special Publication 800-218 https://nvlpubs.nist.gov/nistpubs/specialpublications/nist.sp.800-218.pdf ïŒ2025幎7æ25æ¥ã¢ã¯ã»ã¹ïŒ OWASP SAMM - About us https://owaspsamm.org/about/ ïŒ2025幎7æ25æ¥ã¢ã¯ã»ã¹ïŒ ç ä¿®ã®å
šäœå ç ä¿®ã¯äžžäžæ¥ãããŠã以äžã®3éšæ§æã§è¡ããŸããã 1. ã¢ãžã£ã€ã«è
åšã¢ããªã³ã°ïŒåº§åŠïŒ ãŸãã¯ã¢ãžã£ã€ã«ãšè
åšã¢ããªã³ã°ã®åºç€ãã€ã³ãããã座åŠã§åŠãã ç¥èãããã®åŸã®ã¯ãŒã¯ã§ ããã«å®è·µãã ããšã§ãå®ççã®åäžãå³ããŸãã 2. è
åšã¢ããªã³ã°ã¯ãŒã¯ã·ã§ããïŒã°ã«ãŒãèšè°ïŒ ã¢ãžã£ã€ã«ã®ãã©ã¯ãã£ã¹ã掻çšããªããè
åšã¢ããªã³ã°ãå®è·µãããŒã ã§ã äœãèµ·ãããå°ãã ããªã©å¯Ÿè©±ããªãããªã¹ã¯ãæŽãåºããŸãã 3. è匱æ§èšºæãã³ãºãªã³ïŒèªãäœéšããïŒ å®éã«ãããããµã€ãããæ»æããè匱æ§ãã©ã®ããã«æªçšãããã®ãã æãåãã㊠åŠã³ãŸãã ã¢ãžã£ã€ã«è
åšã¢ããªã³ã°ïŒåº§åŠïŒã®å
容 座åŠããŒãã§ã¯ãã¢ãžã£ã€ã«ãšè
åšã¢ããªã³ã°ããããã®ãWhy?ããšãWhat?ãã解説ããåºç€ç¥èã身ã«çããŠããããŸããã è
åšã¢ããªã³ã°ã«é¢ããŠã¯ãå®è·µããããã®ä»¥äžã® 4ã€ã®éèŠãªåã ãäžå¿ã«é²ãæ¹ã説æããŸããã ãåïŒãç§ãã¡ã¯äœã«åãçµãã§ãããïŒ ãåïŒãäœãåé¡ã«ãªããããïŒ ãåïŒãããã«å¯ŸããŠäœãããã®ãïŒ ãåïŒãååã«ããŸãã§ãããïŒ ãŸããæåã®åããç§ãã¡ã¯äœã«åãçµãã§ãããïŒãã«å¯Ÿããçããå¯èŠåãã DFDïŒããŒã¿ãããŒå³ïŒã®æžãæ¹ ã¯ãåŸã®ã¯ãŒã¯ã·ã§ããã®è³ªãé«ããããã«ãäžå¯§ã«ã¬ã¯ãã£ãŒããŸããã 座åŠã®æ§åãçãããçå£ã«èª¬æãèããŠãããŸããã è
åšã¢ããªã³ã°ã¯ãŒã¯ã·ã§ããïŒã°ã«ãŒãèšè°ïŒã®é²ãæ¹ ç¥èã¯ã䜿ã£ãŠããåããŠå®è·µçãªã¹ãã«ãšãªããŸãã ãã®ã¯ãŒã¯ã·ã§ããã§ã¯ã座åŠã§åŠãã è
åšã¢ããªã³ã°ã®é²ãæ¹ããã¢ãžã£ã€ã«ã®ãã©ã¯ãã£ã¹ã䜿ããªããã°ã«ãŒãã§å®è·µããŸãã ãã®ç®çã¯ãåã«æé ããªããã®ã§ã¯ãªãã察話ãéããŠãªã¹ã¯ãçºèŠããæ¥œããããã°ã«ãŒãã§ååããŠåŸã
ã«ã»ãã¥ãªãã£ãé«ããŠãããšãããã¢ãžã£ã€ã«ãšè
åšã¢ããªã³ã°åæ¹ã®äŸ¡å€èгãååããªã¢ã«ã«äœéšããŠãããããã®æŽ»åããã€ã³ãã»ãããèªåãã¡ã®ãã®ã«ããŠãããããšã«ãããŸãã ã¯ãŒã¯ã·ã§ããã¯ã以äžã®æµãã§é²ããŸããã æ°å2ã3åãšå
茩ãšã³ãžãã¢1åã§ã°ã«ãŒããçµã¿ãŸããïŒå
š3ã°ã«ãŒãïŒ åã°ã«ãŒãã¯ãã¯ã€ãããŒãã2æäœ¿ããŸãã ãã¯ã€ãããŒãã®1æç®ã¯ãè
åšã¢ããªã³ã°ïŒã¢ãã«äœæâãªã¹ã¯ã®æŽãåºãâå¯Ÿçæ€èšïŒã«äœ¿ããŸããïŒãåïŒãïœãåïŒãã«è©²åœïŒ ãã¯ã€ãããŒãã®2æç®ã¯ããµããããã®å
å®¹ãæžãåºããŸããïŒãåïŒãã«è©²åœïŒ DFDã¯ããŒã«ãŒã§æžã蟌ã¿ãæŽãåºãããªã¹ã¯ã察çã¯ä»ç®ã§è²Œãä»ããŸãã ã¢ãžã£ã€ã«ã®ãã©ã¯ãã£ã¹ãåãå
¥ããã ãã©ã³ãã³ã°(10å) â è
åšã¢ããªã³ã°(25å) â ãµãããã(10å) ãã1ã¹ããªã³ãïŒ45åïŒã®ã¿ã€ã ããã¯ã¹ãšããããã3åç¹°ãè¿ããŸãã è
åšã¢ããªã³ã°ã®ãé¡ãšããŠãåæå¯Ÿè±¡ã¢ããªã®èŠä»¶ãæç€ºããŸãã ãªããä»åã®ãé¡ã¯ãåŸã®è匱æ§èšºæãã³ãºãªã³ã§çšããããããã¢ããªïŒ Bad Todo List ïŒããšããŠããåïŒãã®DFDäœæããã¹ã¿ãŒãããŸããã ã¯ãŒã¯ã·ã§ããã®æ§åããã¯ã€ãããŒããå²ãã§ã掻çºã«å¯Ÿè©±ãããŠããŸããïŒ ãã¯ã€ãããŒã1æç®ïŒDFDãšãªã¹ã¯ïŒ ãã¯ã€ãããŒã2æç®ïŒãµããããïŒ æåŸã«ããããã®ã°ã«ãŒãã§ææãçºè¡šïŒ è匱æ§èšºæãã³ãºãªã³ïŒèªãäœéšããïŒã®é²ãæ¹ ãã®ãã³ãºãªã³ã®ç®çã¯ãè
åšã¢ããªã³ã°ã§ç¹å®ãããªã¹ã¯ãã æ»æè
ã®èŠç¹ã§ã远äœéšããã ããšã«ãããŸãã é ã§çè§£ããã ãã®è
åšããèªãã®æã§æ»æãæåãããç¬éã«ãçã
ãã宿ãžãšå€ãããŸãããã®äœéšããããã»ãã¥ãªãã£ãèªåããšãšããŠæããããå®å
šãªèšèšã»éçºã«ã€ãªããããã®æã广çãªåŠã³ã§ãã å
·äœçã«ã¯ä»¥äžã®ããŒã«ã䜿ã£ãŠãã³ãºãªã³ã宿œããŸããã ããããµã€ã : Bad Todo List æ»æããŒã« : ããŒã«ã«ãããã·ãBurp Suite Community Editionã ãŸããåãæ±ãè匱æ§ã¯ãIPAã®ã å®å
šãªãŠã§ããµã€ãã®äœãæ¹ ãã§ç޹ä»ãããŠããäž»èŠãªè匱æ§ãšããŠãäžæ©ãã€è§£èª¬ããªãããå®éã«ããŒã«ãæäœããŠæ¢ããŠããããŸããã SQLã€ã³ãžã§ã¯ã·ã§ã³ OSã³ãã³ãã»ã€ã³ãžã§ã¯ã·ã§ã³ ãã£ã¬ã¯ããªã»ãã©ããŒãµã« ã»ãã·ã§ã³ç®¡çã®äžå ã¯ãã¹ãµã€ãã»ã¹ã¯ãªããã£ã³ã°ïŒXSSïŒ ã¯ãã¹ãµã€ãã»ãªã¯ãšã¹ãã»ãã©ãŒãžã§ãªïŒCSRFïŒ ãããã®è匱æ§ããè
åšã¢ããªã³ã°ã§åŠãã STRIDE ã®ã©ã®è
åšã«ããŽãªã«ç¹ããã®ãããããã³ã°ãããšä»¥äžã®ããã«ãªããŸãã è
åšãšè匱æ§ã®ãããã³ã°ïŒç ä¿®è³æããæç²ïŒ ãããŠããªããšä»åã®ãã³ãºãªã³ã«ã¯ããäœç³»çã«åŠã¶å®å
šãªWebã¢ããªã±ãŒã·ã§ã³ã®äœãæ¹ãã®èè
ã§ãã 埳䞞浩å
ç ã«ãç¹å¥ã²ã¹ãïŒãªãã¶ãŒããŒïŒãšããŠãªã³ã©ã€ã³ã§ãåå ããã ããŸããïŒåŸ³äžžå
çãæ¬åœã«ããããšãããããŸããïŒ åŸ³äžžæµ©å
çãšãã³ãºãªã³å®æœäžã®æ§åïŒç»åãå°ãããŠèŠã«ããã§ãããã¡ãããšåŸ³äžžå
çãæ¬äººãããã£ããããŸãïŒïŒ ãã£ãŒãããã¯ïŒå¹ææ€èšŒïŒ ç ä¿®ã®ãŽãŒã«ã§ããã ã»ãã¥ãªãã£ã®åæãããã ããéæã§ããããæ€èšŒãããããã¯ãŒã¯ã·ã§ããã§å®è·µãããµããããã®ææ³ã +/ÎïŒãã©ã¹/ãã«ã¿ïŒ ãã䜿ã£ãŠã¢ã³ã±ãŒããåããŸããã ç ä¿®å
šäœãšããŠã¯ãç ä¿®ã®ãŽãŒã«ã®éæåºŠã¯ã 8.83ç¹ ïŒ10ç¹æºç¹ïŒããšãªããŸãããååã«ããŠã¯å第ç¹ã®å¹æãåŸãããšãã§ããã®ã§ã¯ãªãã§ããããã ç ä¿®å
šäœã®éæåºŠ 以äžãããããã®ã³ã³ãã³ãã®ã¢ã³ã±ãŒãçµæã§ãã ã¢ãžã£ã€ã«è
åšã¢ããªã³ã°ïŒåº§åŠïŒã®ã¢ã³ã±ãŒãçµæ 座åŠã§ããããæ³å®ãããæºè¶³åºŠã¯é«ããç®çãææ³ãçè§£ã§ãããšãããã£ãŒãããã¯ãããã ããŸããã座åŠã¯åŠç¿å®ççã«é£ã¯ãããŸãããç¥èã®å
±éçè§£ã¥ãããšããç¹ã§ã¯ã¯ãŒã¯ã®åã«å®æœããã°å¹æãé«ãŸãããšãæåŸ
ã§ããŸãã ãã©ã¹ïŒããã£ãããšïŒ ãã¢ãžã£ã€ã«ã®ææ³ã®è©³çްã®èª¬æããããèžãŸããããã§ã¢ãžã£ã€ã«ãè¡ãéã®è
åšã¢ããªã³ã°ã«ã€ããŠã®è§£èª¬ããã£ãããã話ã®éçãããããããã£ãã ãç¥ããªãå
容ãã»ãšãã©ã§ããã€åãããããå匷ã«ãªã£ãã ãè
åšã¢ããªã³ã°ããªãå¿
èŠãªã®ããããããŸããããDFDãªã©ç¥ããªãã£ãããšãç¥ããã è
åšã¢ããªã³ã°ã¯ãŒã¯ã·ã§ããïŒã°ã«ãŒãèšè°ïŒã®ã¢ã³ã±ãŒãçµæ æºè¶³åºŠã¯éåžžã«é«ããããžãã£ããªæèŠãå€ãå¯ããããŸãããã¯ãŒã¯ã·ã§ããäžã¯éåžžã«æŽ»æ°ããããã¿ã€ã ããã¯ã¹ãåºåã£ãŠå®æœããããšã§ã¡ãªããªãçãŸãããšæããŠããŸãã ãã©ã¹ïŒããã£ãããšïŒ ã座åŠã§åŠãã å
容ãã¯ãŒã¯ã§ã¢ãŠããããããããšã§ãããç¥èãæ·±ãããããåã¹ããªã³ãããã£ãšããéã§ããïŒã ãè
åšã®èŠã€ãæ¹ãå°ãããã£ãããåçŽã«æ¥œããã£ãã ãDFD, ãªã¹ã¯ããã, STRIDEã®ãã¬ãŒã ã¯ãŒã¯ãå®éã«äœ¿çšããŠè匱æ§ã«ã€ããŠèããããšã§ç¥èãå®çããã è匱æ§èšºæãã³ãºãªã³ã®ã¢ã³ã±ãŒãçµæ ãã¡ãã¯æºè¶³åºŠã«ã°ãã€ãããããã€ã³ããããå€ããªããããç¹ã課é¡ãšããŠæ®ããŸããã ãã©ã¹ïŒããã£ãããšïŒ ããã¹ããµã€ãã§è匱æ§ãèŠã€ããŠããã®ã楜ããã£ãã ãäºååŠç¿ã§ããçšåºŠã¯çè§£ããŠããããã©ããã£ããæ»æãããã®ããå®éã«åŠã¶ããšãã§ããã ãã«ã¿ïŒæ¹åãããããšïŒ ãããå°ãåŸåãæãåãããªããåŠã³ããã£ãã ãå®éã«ç°¡åãªã¢ããªãäœã£ãŠããç©Žãæ¢ã圢åŒã®æ¹ããå®è£
ãšçŽã¥ãããã ãšæã£ãã ãŸãšã ä»åã¯æ°åãšã³ãžãã¢åãã«ãã»ãã¥ãªãã£ã®åæãæŽããããšããŽãŒã«ã«ç ä¿®ãèšèšããŸããã å
·äœçã«ã¯ããªã³ã©ã€ã³ã§ã®äºååŠç¿ïŒä»åã®èšäºã§ã¯èª¬æããŠããŸãããïŒããå§ãŸãã座åŠã§ã®ã€ã³ããããã¯ãŒã¯ã·ã§ãããšãã³ãºãªã³ã§ã®ã¢ãŠãããããžãšç¹ããæ§æãåããŸãããã¢ã³ã±ãŒãçµæãããããã®äžé£ã®æµããç¥èã®å®çã«å¹æçã ã£ããšæããŠããŸãã ç©æ¥µçã«åå ããŠãããæ°åãšã³ãžãã¢ã®çãããããããšãããããŸããïŒä»ååŠãã åæãããã²å®éã®æ¥åã§æŽ»ãããŠãã ãããïŒæ¥å¹Žã宿œããŸãïŒïŒ ãããèªè
ã®çæ§ã®çµç¹ã§ããã»ãã¥ãªãã£ãä»äººããšã«ãªã£ãŠããããšæããŠãããªãããã®ãã¢ãžã£ã€ã«è
åšã¢ããªã³ã°ãã®ã¢ãããŒããããã®æåãå€ãããã£ããã«ãªããããããŸãããæ¬èšäºãçæ§ã®ã圹ã«ç«ãŠãã°å¹žãã§ãã