
åã話ã®ç¶ãã
æåã®éšåã¯ããã«ã2çªç®ã¯ããã«ã3çªç®ã¯ããã«ãããŸã ã
4.5幎åãç§ã¯ãã®ããžãã¹ã«å®å šã«äžé©åãªèšèªãã€ãŸãPHPã§æå·é貚ãæžãå§ããã®ã¯ç¡è¬ã§ããã çµå±ãç§ã¯æžããŸããïŒç§ã¯é åºã§ãïŒããæŸèæã§æŸèæãæã«å ¥ããŸããããããäžè¬çã«æ©èœãããšããäºå®ã¯ãããçš®ã®éæ³ã§ããã
ç§ã¯ããã«ããªãã«èŠåããããšæããŸããç§ã¯ç¬åŠã®ããã°ã©ããŒã§ãååŠæŽã®ããããã°ã©ããŒã§ãããããŠããããç©ããã«èšãã°ãã³ãŒããæžãããšã¯çæ³çã§ã¯ãããŸããã
ããã¯ãã¹ãŠãç§ãã«ãã£ã¢ãšããååã®å¥³ã®åãšå¥ããåãæ¥ã«ïŒ2015幎4æ4æ¥ïŒGoãå匷ããŠæå·é貚ãæžãæããããšã«ãããšããäºå®ããå§ãŸããŸããã ãã¿ãã¬ã®äžã§ã«ãã£ã¢ã«ã€ããŠæžãããšã¯ã§ããŸããã ããã«ãããããããHabrã¯ãææç©èªã§ã¯ãªãITèšäºã®ããã«ããããŠGoããŒãã«èå³ã®ããå³ããITã®äººã ã®ããã«ãåã«ãã«ãã£ã¢ã«ã€ããŠããã¿ãã¬ã«æ³šæãæããªããããããŸããã
8ãæã®çµæïŒã¢ããªã±ãŒã·ã§ã³ã¯ãWinïŒ 64/32 ïŒãOSXïŒ64/32ïŒãLinuxïŒ 64/32 ïŒãFreeBSDïŒ 64/32 ïŒã Android ã IOSã§å®è¡ãããŸãã
åèšã³ãŒãã¯çŽ73kè¡ã§ãç°ãªãOSã®ã³ãŒãã¯æ°çŸè¡çšåºŠã§ãã
40k-åŠç/ãããã¯çæ/ tr-17ã17.5k-ã€ã³ã¿ãŒãã§ã€ã¹çšã³ã³ãããŒã©ãŒã15.5k-ãã³ãã¬ãŒãã
PostgreSQLãSQLiteãMySQLããµããŒããããŠããŸãã
ç§ã®äœåããã¹ããã人ã«èŠåããŸã-ãã°ããããããããŸãããæéãããã°ã darwin @ dcoin.clubãŸãã¯ããã®PMã§ãããã«ã€ããŠæžããŠãã ããã ææ¡ãã¢ããã€ã¹ãæè¿ããŸãã
æåã®3ã€ã®éšåã§ã¯ãWebãµãŒããŒãdcoinã§ã©ã®ããã«æ©èœãããã html / template ãããŒã¿ããŒã¹ãã¹ã ãŒãºãªã¢ããªã±ãŒã·ã§ã³å®äºãæå·åããããã¯è§£æã«ã€ããŠèª¬æããŸããã
ãã®èšäºã§ã¯ãGoãAndroidã§äœ¿çšããæ¹æ³ã«ã€ããŠèª¬æããŸãã
éå§ãã
èšãã®ã¯é¢çœãã§ããããã®å€ãç§ã®æåã®ã¢ã³ããã€ããç§ãšäžç·ã«ç»å ŽããŸããã ãã以åã¯ãNokia 1200ã亀æããçç±ãèŠã€ããããšãã§ããŸããã§ããã512ã¡ã¢ãªãš2ã³ã¢ã®3000ã«ãŒãã«ã®å®äŸ¡ãªZTEãè³Œå ¥ããŸããã ãã¹ãã«ã€ããŠã¯ãããã ãã§ãã ãããŠãããªãã圌ããé»è©±ããããããšãã§ããŸãã
apkã§github.com/golang/mobileãä»ããŠã³ã³ãã€ã«ãäœæãããã£ãã ç§ã¯ããã¥ã¢ã«ãèŠãŸãããããã¹ãŠãã·ã³ãã«ãªããã§ãã ã»ãŒããã«ããã€ããªãã³ã³ãã€ã«ããAndroidã®ã«ãŒãã§å®è¡ããããšãå€æããŸããã ç§ã¯ãã¹ãŠãé 調ã«é²ãã§ããããšãå¬ããæã£ãŠããã®ã§ã2ã3æ¥åŸã«ã¯Dcoinãå®è¡ããŠapkãå®è¡ã§ããããã«æãããŸããã
Apkã®ãã«ãã¯é£ãããããŸããã§ããã åºæ¬çã«ãå¿ èŠãªã®ã¯ãã©ãŠã¶ã§127.0.0.1ïŒ8089ãèªåçã«éãããšã ãã§ããã ããã§å€±éããŸããã ç§ã¯æ°æ¥éã°ãŒã°ã«ã§å®éšããéæã§ããã®ã¯ãã©ãŠã¶ã§å¿ èŠãªãã¹ããéãããã«ãŠãŒã¶ãŒã«æ±ããç»åãã¬ã³ããªã³ã°ããããšã ãã§ããã
ç§ã¯arãééããããšã«ããŸããã ã€ãŸã Android Studioã®ã©ã€ãã©ãªãšããŠè¿œå ããŸãã ãããŠãã¹ã¿ãžãªã®æ段ã«ãã£ãŠããã§ã«ãã©ãŠã¶ãŸãã¯ãŠã§ããã¥ãŒãéããŠããŸãã ããããsqliteã¯é åºã«ã³ã³ãã€ã«ããããšãæã¿ãŸããã§ãããCã³ã³ãã€ã©ã«ãšã©ãŒãããããã®æç¹ã§åé¡ã®è§£æ±ºçããªãã£ãããšãå€æããŸããïŒä»ã®ãšãããæ¢ã«ååšããŠããŸãïŒã
Katyaã«ã€ããŠ
ïŒ åã®ããŒãã®çµãã ïŒïŒç§ã¯VKã§åœŒå¥³ã«æçŽãæžãã圌女ã¯å®¶ã§éºäœãå¿ããŠãããšèšããŸããããããŠä»ã圌女ã«ã¯å人ãããŸããã ç§ã¯åœŒå¥³ãåŸ
ã€ãšæžããã ãã®åŸã圌ã¯ãåã³ç§ã«é»è©±ãããæžãããããªãã§ãã ãã!!!!ããåãåããŸããã 質åã¯ããŸããã§ãããé£ã®ã¢ããŒãã«é»è©±ããã«ãã£ã¢ã家ã«ãããšãã«è±ãèŽãããã«é Œã¿ãŸããã 圌ã¯æ°æéåŸã«Dcoin on Goãæžãæããããšã決ããåŸã家ã«çããŸããã
æ°æ¥åŸãç§ã¯åœŒå¥³ã«ãæ°ã¶æéãèªåã®ãããžã§ã¯ãã«åãã£ãŠãããšæžããŠãç§ã«äœãæ°ã«ããªãããã«é Œã¿ãŸããã
1é±éåŸãã«ãã£ã¢ãããããã«ã¡ã¯ã ãå æ°ã§ããïŒã ç§ã¯çããŸããã§ããã 1é±éåŸãå¥ã®ãããã«ã¡ã¯ãã ãå æ°ã§ããïŒã ç§ã¯åã³çããŸããã§ããã
æ°æ¥åŸãç§ã¯åœŒå¥³ã«ãæ°ã¶æéãèªåã®ãããžã§ã¯ãã«åãã£ãŠãããšæžããŠãç§ã«äœãæ°ã«ããªãããã«é Œã¿ãŸããã
1é±éåŸãã«ãã£ã¢ãããããã«ã¡ã¯ã ãå æ°ã§ããïŒã ç§ã¯çããŸããã§ããã 1é±éåŸãå¥ã®ãããã«ã¡ã¯ãã ãå æ°ã§ããïŒã ç§ã¯åã³çããŸããã§ããã
GoNativeActivity
ããæç¹ã§ããã®ããžãã¯ãã¡ã€ã«ããªããã°äœãæ©èœããªãããšãæããã«ãªããŸããã ç§ã¯å®éšãå§ããããã€ãã®å€æŽãå ããapkãçæããäœãå€æŽããŸããã§ããã æ°æ¥åŸãç§ã¯ãããææ ¢ã§ãããgomobileéçºè ã®1人ã«æçŽãæžãããšã«ããŸããã GoNativeActivityã®å€æŽåŸãgo generate github.com/c-darwin/mobile/cmd/gomobileãåŒã³åºããŠã.dexãã¡ã€ã«ãçæãããã®åŸgithub.com/c-darwin/mobile/cmd/gomobileãã€ã³ã¹ããŒã«ããå¿ èŠãããããšãããããŸããã
GoNativeActivityãç·šéããããšãåŠã³ãçŽ æŽãããæ©äŒãåŸãŸããã å¿ èŠãªã®ã¯ãJavaã§èšè¿°ã§ããããã«ããããšã ãã§ããã ããããç§ã¯æ¹æ³ãç¥ããŸããã§ããããããŠä»ãç§ã¯æ¹æ³ãç¥ããŸããã ããããç§ã¯ãŸã äœããããããšãã§ããŸããã ãããç§ã®GoNativeActivityã§ãã å°ãåŸã«ãAndroidManifest.xmlãäœæããæ¹æ³ã«æ°ä»ããŸãããããã«ãããããã«å€ãã®æ©äŒãäžããããŸããããã®çµæããã©ãŠã¶ãŒã§äœæ¥ãã代ããã«ãWebViewã§äœæ¥ã§ããããã«ãªããŸãããããã WebViewã®å®è£ ã§ãã
Katyaã«ã€ããŠ
çŽ1é±éåŸã圌女ã¯ç·æ¥ã«TR 7ãå¿
èŠã ãšæžãã åéã§ã 圌女ã¯ã¢ããŒãã®ä»£éãæãã®ã«ååã§ã¯ãããŸããã ãOKããšçããŸããã ç¿æ¥ã圌女ã¯ç§ã®å®¶ã«æ¥ãŸããã
éç¥
ç§ã¯ããéãå°çãããšãããŸãã¯æ³å®é貚ãžã®ã³ã€ã³ã®äº€æã®çä¿¡èŠæ±ãå°çãããšãã«éç¥ãè¡ããããšèããŸããã ã°ãŒã°ã«ã§ã¹ã¿ãã¯ãªãŒããŒãããŒã調æ»ããåŸã次ã®ã³ãŒããååŸããŸããã
public void notif(String title, String text) { Intent intent = new Intent("org.golang.app.MainActivity"); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); // , mBuilder.setSmallIcon(R.drawable.icon); mBuilder.setContentTitle(title); mBuilder.setContentText(text); Intent resultIntent = new Intent(this, MainActivity.class); TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); stackBuilder.addParentStack(MainActivity.class); // Adds the Intent that starts the Activity to the top of the stack stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(resultPendingIntent); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // notificationID allows you to update the notification later on. mNotificationManager.notify(2, mBuilder.build()); }
ãã®éç¥ãGoããååŸããæ¹æ³ãç解ããã ãã§ãã ããã§ç§ã¯ããäžé±éç«ã¡åŸçããŠããŸãã JNIãšåŒã°ããç£ã䜿çšããå¿ èŠãããããšãå€æããŸããã 次ã®ãããªæ§é ã«ãªããŸããGoã¯CãåŒã³åºããŸããããã«ãããJavaãã·ã³ãèµ·åãããéç¥ãéä¿¡ãããŸãã ãã©ãŒ ç¹ã«Cã§ã¯ãJavaã®ããã«ãç§ã¯ã»ãŒå®å šã«ãŒãã§ããããšãèæ ®ããŠãã ããã
èŠããã«ãå€ãã®èŠåŽã®æ«ãç§ã¯åäœããã³ãŒããæžãããã®äžã§äœãèµ·ãã£ãŠããã®ãããç解ããããšãã§ããŸããã
package notif /* #cgo LDFLAGS: -llog -landroid #include <android/log.h> #include <jni.h> #include <stdlib.h> #define LOG_FATAL(...) __android_log_print(ANDROID_LOG_FATAL, "Go/fatal", __VA_ARGS__) void notif_manager_init(void* java_vm, void* ctx, char* title, char* text) { JavaVM* vm = (JavaVM*)(java_vm); JNIEnv* env; int err; int attached = 0; err = (*vm)->GetEnv(vm, (void**)&env, JNI_VERSION_1_6); if (err != JNI_OK) { if (err == JNI_EDETACHED) { // JM if ((*vm)->AttachCurrentThread(vm, &env, 0) != 0) { LOG_FATAL("cannot attach JVM"); } attached = 1; } else { LOG_FATAL("GetEnv unexpected error: %d", err); } } // jstring title jstring javaTitle = (jstring)(*env)->NewStringUTF(env, (const char *)title); // jstring text jstring javaText = (jstring)(*env)->NewStringUTF(env, (const char *)text); // , jclass cls = (*env)->GetObjectClass(env, ctx); // .Ljava/lang/String;Ljava/lang/String - V(Void) - jmethodID nJmethodID = (*env)->GetMethodID(env, cls, "notif", "(Ljava/lang/String;Ljava/lang/String;)V"); // (jstring)(*env)->CallObjectMethod(env, ctx, nJmethodID, javaTitle, javaText); if (attached) { // JM (*vm)->DetachCurrentThread(vm); } } */ import "C" import ( "github.com/c-darwin/mobile/internal/mobileinit" ) func SendNotif(title string, text string) { ctx := mobileinit.Context{} C.notif_manager_init(ctx.JavaVM(), ctx.AndroidContext(), C.CString(title), C.CString(text)) }
åæ§ã«ãäœæ¥ãã£ã¬ã¯ããªãååŸããããã±ãŒãžget_files_dir.goãååŸããŸããã
Katyaã«ã€ããŠ
ç§ã¯åœŒå¥³ã®é ã«äœããã£ãã®ãåãããªããããããç§ã¯åœŒå¥³ãå°ãããã ãããšæã£ãã äžæ©äžã圌女ã¯ã¡ãã£ãšå¥åŠã ã£ãã ç§ã¯å¯ããŠã圌女ãšã®æ¥è§Šãé¿ããããšããŸããã ãè¶ã飲ã¿ãŸããã ã«ãã£ã¢ã¯å®¶ã«åž°ãå¿
èŠããããšèšã£ãã ã¿ã¯ã·ãŒãåŒãã ã
圌ã圌女ãã¿ã¯ã·ãŒã«è·è¡ãããšãã圌ã¯å°ããïŒ
-ç§ãã¡ã¯äžç·ã§ã¯ãããŸããããïŒ ã€ãŸã ããããããšã¯ã§ããŸããïŒ
圌女ïŒ-ãç§ã欲ãããã®ããšããæå³ã§ã¯ïŒ ããããç§ãã¡ã¯äžç·ã§ãïŒç§ã«è¿ã¥ããŸãïŒ
ç§ïŒ-ããŠãæåã®ããŒãã¯ãããŸããã§ãããæåãããã¹ãŠãå§ããããã§ã¯ãããŸããã
圌女ïŒ-ã ããä»ã ã£ãã
ç§ïŒ-ãªããŠããŒãã ããéã®ããã«æ¥ãã ãã ã
ç§ãã¡ã¯ãã§ã«ã¿ã¯ã·ãŒã®ãã¢ã«ç«ã£ãŠããã®ã§ãç§ã¯åœŒå¥³ã座ããããã©ã€ããŒã«æ¯æãã圌女ã¯å»ã£ãã
圌ã圌女ãã¿ã¯ã·ãŒã«è·è¡ãããšãã圌ã¯å°ããïŒ
-ç§ãã¡ã¯äžç·ã§ã¯ãããŸããããïŒ ã€ãŸã ããããããšã¯ã§ããŸããïŒ
圌女ïŒ-ãç§ã欲ãããã®ããšããæå³ã§ã¯ïŒ ããããç§ãã¡ã¯äžç·ã§ãïŒç§ã«è¿ã¥ããŸãïŒ
ç§ïŒ-ããŠãæåã®ããŒãã¯ãããŸããã§ãããæåãããã¹ãŠãå§ããããã§ã¯ãããŸããã
圌女ïŒ-ã ããä»ã ã£ãã
ç§ïŒ-ãªããŠããŒãã ããéã®ããã«æ¥ãã ãã ã
ç§ãã¡ã¯ãã§ã«ã¿ã¯ã·ãŒã®ãã¢ã«ç«ã£ãŠããã®ã§ãç§ã¯åœŒå¥³ã座ããããã©ã€ããŒã«æ¯æãã圌女ã¯å»ã£ãã
Goã§ã¯ãéç¥ãåŒã³åºã次ã®ã³ãŒããååŸããŸããã
// +build android package sendnotif import ( "github.com/c-darwin/mobile/notif" ) func SendMobileNotification(title, text string) { notif.SendNotif(title, text) }
Katyaã«ã€ããŠ
æãé»è©±ã鳎ã£ããããã¯ã«ãã£ã¢ã ã£ãã ç§ã¯é»è©±ãåããŸããã§ããã
ãµãŒãã¹
WebãµãŒããŒãåžžã«èœã¡å§ããŠããããšã«æ°ä»ããŸããã 財åžãæ±ãããšã¯äžå¯èœã§ããã Googleã¯ããµãŒãã¹ãè¡ãããšãå¿ èŠã§ããããšã«æ°ã¥ããŸããã ä»åã¯ããã»ã©å€ãã®å°é£ã¯ãããŸããã§ããããœãŒã¹ã¯ããã«ãããŸã ã ShortcutIconïŒïŒã¯ããã¹ã¯ãããã¢ã€ã³ã³ãäœæããŸãã
Katyaã«ã€ããŠ
ç¿æ¥ã圌女ã¯ããã¹ãã¡ãã»ãŒãžãããã«ã¡ã¯ã æšæ¥é»è©±ããŸããããããªãã¯é»è©±ãåããŸããã§ãããã ç§ã¯çããŸããã§ããã
ã¢ã¯ã»ã¹ã¢ã€ã³ã³
éç¥ã衚瀺ãããããã¢ã€ã³ã³ãæå®ããå¿ èŠããããŸãã Androidã§ãªãœãŒã¹ãæäœããæ¹æ³ãç解ããå¿ èŠããããŸããã dexãã¡ã€ã«ãçæãããšãã«R.jarãçæããŠæ¥ç¶ããå¿ èŠãããããšã倧ãŸãã«ç解ããŸããã
javaãã¡ã€ã«ã®çææ¹æ³ãGoogleã§èª¿ã¹ããšããã次ã®ã³ãã³ããå€æããŸããã
aapt package -v -f -J /home/z/go-projects/src/github.com/c-darwin/dcoin-go/ -S /home/z/go-projects/src/github.com/c-darwin/dcoin-go/res/ -M /home/z/go-projects/src/github.com/c-darwin/dcoin-go/AndroidManifest.xml -I /home/z/android-sdk-linux/platforms/android-22/android.jar
çµæã®R.javaã¯ãR / org / golang / app /ã«é 眮ãããŸãã
mv R.java /home/z/go-projects/src/github.com/c-darwin/dcoin-go/R/org/golang/app/
ãããŠãR.jarãçæããŸãã
cd R && jar cfv /home/z/go-projects/src/github.com/c-darwin/dcoin-go/R.jar
眲åãªãã®apkãçæããŸãã
aapt package -v -f -J /home/z/go-projects/src/github.com/c-darwin/dcoin-go/ -S /home/z/go-projects/src/github.com/c-darwin/dcoin-go/res/ -M /home/z/go-projects/src/github.com/c-darwin/dcoin-go/AndroidManifest.xml -I /home/z/android-sdk-linux/platforms/android-22/android.jar -F unsigned.apk
Katyaã«ã€ããŠ
äžé±éåŸã圌女ã¯ZPãåãåã£ããšæžãã ãããŠãç§ã®ã«ãŒãã«ãéãæãããã äœãçããŸããã§ãã æ°æ¥åŸã圌女ã¯ãããã«ã¡ã¯ã ãå
æ°ã§ããïŒã ç§ã¯åã³ç¡èŠããŸããã
ã«ãŒãresources.arscã«ãã«ããŸãã
unzip unsigned.apk -d apk && mv apk/resources.arsc .
次ã«ã gomobileããgendex.goãä¿®æ£ããå¿ èŠããããŸãã
cmd := exec.Command( "javac", "-source", "1.7", "-target", "1.7", "-bootclasspath", platform+"/android.jar", "-classpath", "/home/z/go-projects/src/github.com/c-darwin/dcoin-go/R.jar:"+androidHome+"/extras/android/m2repository/com/android/support/support-v4/22.2.1/support-v4-22.2.1-sources.jar", "-d", tmpdir+"/work", )
Katyaã«ã€ããŠ
çŽ1é±éåŸãã€ãã«ããŒãäžã§Dcoinãèµ·åãããããã¯ãã©ã®ããã«çæãããã©ã®ããã«ããŒãéã移åããŠããŒã¿ããŒã¹ãæºãããã確èªããŸããã ããã¯ç§ã®äžæçãªé mitã®çµãããšèããããããã«æããã®ã§ãã«ãã£ã¢ã«æçŽãæžããŸããã
æ°ããDexãçæããŸãïŒ
ANDROID_HOME=/home/z/android-sdk-linux go generate github.com/c-darwin/mobile/cmd/gomobile/
次ã«ãgomobileèªäœã®ãã€ããªïŒ
go install github.com/c-darwin/mobile/cmd/gomobile/
æåŸã«ãapkãååŸããŸãã
CGO_ENABLED=1 GOOS=android ANDROID_HOME=/home/z/android-sdk-linux gomobile build -v github.com/c-darwin/dcoin-go
ãã®çµæãapkãçæããããã®ãã®ãããªbashã¹ã¯ãªãããååŸããŸããã
./bindata.sh echo "######## generate R.java ########" aapt package -v -f -J /home/z/go-projects/src/github.com/c-darwin/dcoin-go/ -S /home/z/go-projects/src/github.com/c-darwin/dcoin-go/res/ -M /home/z/go-projects/src/github.com/c-darwin/dcoin-go/AndroidManifest.xml -I /home/z/android-sdk-linux/platforms/android-22/android.jar mv R.java /home/z/go-projects/src/github.com/c-darwin/dcoin-go/R/org/golang/app/ echo "######## generate R.jar ########" cd R jar cfv /home/z/go-projects/src/github.com/c-darwin/dcoin-go/R.jar . cd ../ echo "######## generate unsigned.apk ########" aapt package -v -f -J /home/z/go-projects/src/github.com/c-darwin/dcoin-go/ -S /home/z/go-projects/src/github.com/c-darwin/dcoin-go/res/ -M /home/z/go-projects/src/github.com/c-darwin/dcoin-go/AndroidManifest.xml -I /home/z/android-sdk-linux/platforms/android-22/android.jar -F unsigned.apk echo "######## extract resources.arsc ########" unzip unsigned.apk -d apk mv apk/resources.arsc . rm -rf apk unsigned.apk ANDROID_HOME=/home/z/android-sdk-linux go generate github.com/c-darwin/mobile/cmd/gomobile/ go install github.com/c-darwin/mobile/cmd/gomobile/ CGO_ENABLED=1 GOOS=android ANDROID_HOME=/home/z/android-sdk-linux gomobile build -v github.com/c-darwin/dcoin-go
Katyaã«ã€ããŠ
圌女ã¯ç§ã圌女ãšé£çµ¡ãåã£ããšããäºå®ã«éåžžã«ååãã«åå¿ããäŒãããšã«åæããã ãããã圌女ã¯ãæ°åãæªããã¢ããŒããåããã¬ãŒã«ãã¬ã³ããšãã¹ãã¬ã¹ã®ããã«æ¯æ¥æ³£ãããšèšã£ãŠãèŸããããšã«ããŸããã ç§ãã¡ãäŒããšããç§ã¯åœŒå¥³ã«ç§ãšäžç·ã«æ®ããããã«ç³ãåºãŠãäœãå¿é
ããªãããã«ãããšæ±ºããŸããã
ãããã«
次ã®æåŸã®èšäºã§ã¯ãgomobileãšIOSã«ã€ããŠèª¬æããŸãã ãããŠæåŸã«ãã«ãã£ã¢ã«ã€ããŠã®æ±ºåæŠããããŸãã