diff --git a/pom.xml b/pom.xml
index 9b4e1bc..14c921f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
   info.istlab.IoTP
   IoTP
   jar
-  0.1
+  0.11
   IoTP
   http://maven.apache.org
 
diff --git a/src/main/java/info/istlab/IoTP/App.java b/src/main/java/info/istlab/IoTP/App.java
index 5856993..9e97b73 100644
--- a/src/main/java/info/istlab/IoTP/App.java
+++ b/src/main/java/info/istlab/IoTP/App.java
@@ -1,7 +1,21 @@
 package info.istlab.IoTP;
 
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileFilter;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.channels.Channels;
+import java.nio.channels.FileChannel;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.security.CodeSource;
+import java.security.ProtectionDomain;
 import java.util.ArrayList;
 
 /**
@@ -13,12 +27,22 @@
     static ArrayList iotDirs;
 
     static String workingDir;
+
+    public static String latestVersion;
+    public static Path execPath;
+    public static String downloadurl = "https://cit.istlab.info/IoTP/target/";
+
     
     static {
         userhome = System.getProperty("user.home");
     }
 
     public static void main(String[] args) {
+        try {
+            App.execPath = getApplicationPath(new App().getClass());
+        } catch (URISyntaxException e) {
+            e.printStackTrace();
+        }
 
         // IoTPフォルダを探す
         iotDirs = new ArrayList();
@@ -28,11 +52,13 @@
             workingDir = iotDirs.get(0).getAbsolutePath();
             System.out.println(workingDir);
             new Launcher(iotDirs.get(0)).setVisible(true);
-        } else {
+        } else if (iotDirs.size() > 1){
             System.out.println("フォルダが複数みつかりました");
             for(File f: iotDirs){
                 System.out.println(f.getAbsolutePath());
             }
+        } else {
+            
         }
 
     }
@@ -57,4 +83,76 @@
             }
         }
     }
+
+
+    public static Path getApplicationPath(Class> cls) throws URISyntaxException {
+        ProtectionDomain pd = cls.getProtectionDomain();
+        CodeSource cs = pd.getCodeSource();
+        URL location = cs.getLocation();
+        URI uri = location.toURI();
+        Path path = Paths.get(uri);
+        return path;
+    }
+
+    public static boolean isLatest() {
+        // 最初に、ダウンロードサイトから最新版の情報を得る
+        // 更新があれば、ダウンロードし、ファイルを表示する。
+        StringBuilder sb = new StringBuilder();
+        latestVersion = null;
+        try {
+            URL url = new URL(downloadurl);
+            InputStream is = url.openConnection().getInputStream();
+            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+            String line = null;
+            while ((line = reader.readLine()) != null) {
+                if (latestVersion == null) {
+                    latestVersion = line.trim();
+                    System.out.println(line);
+                }
+                sb.append(line + "\n");
+            }
+            reader.close();
+        } catch (Exception ex) {
+        }
+        // System.out.println(sb.toString());
+        // 同じかどうかチェック
+        // System.out.println("[" + latestVersion + "]");
+        // System.out.println("=" + execPath.getFileName() + "=");
+        if (execPath.getFileName().toString().equals("classes"))
+            return true;
+        return latestVersion.equals(execPath.getFileName().toString());
+    }
+
+    // ダウンロードして実行パーミッションをつける
+    public static String download() {
+        try {
+            URL url = new URL(downloadurl + "/" + latestVersion);
+            ReadableByteChannel readableByteChannel = Channels.newChannel(url.openStream());
+            FileOutputStream fileOutputStream = new FileOutputStream(latestVersion);
+            FileChannel fileChannel = fileOutputStream.getChannel();
+            fileOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
+            fileChannel.close();
+            fileOutputStream.close();
+
+            File execjar = new File(execPath.getParent().toString() + File.separator + latestVersion);
+            execjar.setExecutable(true);
+            return execjar.getAbsolutePath();
+        } catch (Exception ex) {
+        } finally {
+        }
+        return null;
+    }
+
+    public static void reboot(String pathfile) {
+        String com = "sleep 2 ; java -jar " + pathfile;
+        System.out.println(com);
+        ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", com);
+        try {
+            processBuilder.start();
+            System.exit(0);
+        }catch(Exception ex){
+
+        }
+    }
+
 }
diff --git a/src/main/java/info/istlab/IoTP/Launcher.java b/src/main/java/info/istlab/IoTP/Launcher.java
index 4e43754..f2b2be2 100644
--- a/src/main/java/info/istlab/IoTP/Launcher.java
+++ b/src/main/java/info/istlab/IoTP/Launcher.java
@@ -27,7 +27,7 @@
 public class Launcher extends JFrame implements MouseInputListener, KeyListener {
 
     public static Launcher theapp;
-    public static String version = "0.1";
+    public static String version = "0.11";
     // JPanel mainP;
     File root;
     JTree tree;
@@ -70,15 +70,8 @@
         JMenuBar menuBar = new JMenuBar();
         JMenu menu = new JMenu("App"); /**************************************************** */
         menuBar.add(menu);
-        JMenuItem mi = new JMenuItem("show version");
-        mi.addActionListener(ae -> JOptionPane.showMessageDialog(this, "IoTP Launcher v" + version));
-        menu.add(mi);
 
-        // mi = new JMenuItem("最新版をチェック");
-        // // mi.addActionListener(ae -> downloadLatest());
-        // menu.add(mi);
-
-        mi = new JMenuItem("シリアルモニタを開く");
+        JMenuItem mi = new JMenuItem("シリアルモニタを開く");
         mi.addActionListener(ae -> SerialWindow.invoke() );
         menu.add(mi);
 
@@ -86,16 +79,30 @@
         mi.addActionListener(ae -> openExecPath());
         menu.add(mi);
 
-        mi = new JMenuItem("exit");
+
+        mi = new JMenuItem("IoTPのバージョン確認");
+        mi.addActionListener(ae -> JOptionPane.showMessageDialog(this, "IoTP Launcher v" + version));
+        menu.add(mi);
+
+        mi = new JMenuItem("最新版があるかチェック");
+        mi.addActionListener(ae -> downloadLatest());
+        menu.add(mi);
+
+        mi = new JMenuItem("ダウンロードサイトをブラウザで開く");
+        mi.addActionListener(ae -> openURL(App.downloadurl));
+        menu.add(mi);
+
+
+        mi = new JMenuItem("終了");
         mi.addActionListener(ae -> System.exit(0));
         menu.add(mi);
 
         menu = new JMenu("File"); /**************************************************** */
         menuBar.add(menu);
 
-        jcbmi = new JCheckBoxMenuItem("exclude class files from filetree");
-        jcbmi.addItemListener(ae -> reloadFiles());
-        menu.add(jcbmi);
+        // jcbmi = new JCheckBoxMenuItem("exclude class files from filetree");
+        // jcbmi.addItemListener(ae -> reloadFiles());
+        // menu.add(jcbmi);
 
         mi = new JMenuItem("reload filetree");
         mi.addActionListener(ae -> reloadFiles());
@@ -103,9 +110,9 @@
 
         menu.addSeparator();
 
-        mi = new JMenuItem("rename/delete NWP folder");
-        mi.addActionListener(ae -> renameOrDeleteNWPFolder());
-        menu.add(mi);
+        // mi = new JMenuItem("rename/delete NWP folder");
+        // mi.addActionListener(ae -> renameOrDeleteNWPFolder());
+        // menu.add(mi);
 
         // mi = new JMenuItem("get NWP folder");
         // mi.addActionListener(ae -> App.getNWPifnotexist(true));
@@ -188,22 +195,22 @@
         tree.setModel(model);
     }
 
-    // public void downloadLatest() {
-    //     boolean isLatest = App.isLatest();
+    public void downloadLatest() {
+        boolean isLatest = App.isLatest();
 
-    //     // if () {
-    //     if (isLatest) {
-    //         JOptionPane.showMessageDialog(this,
-    //                 "すでに最新版です : v" + version + "\n(download folder: " + App.execPath.getParent().toString() + ")");
-    //     } else {
-    //         int res = JOptionPane.showConfirmDialog(this, "最新版 \n(" + App.latestVersion + ") をダウンロードする?\n(download folder: "
-    //                 + App.execPath.getParent().toString() + ")");
-    //         if (res == JOptionPane.YES_OPTION) {
-    //             App.download();
-    //             openExecPath();
-    //         }
-    //     }
-    // }
+        // if () {
+        if (isLatest) {
+            JOptionPane.showMessageDialog(this,
+                    "すでに最新版です : v" + version + "\n(download folder: " + App.execPath.getParent().toString() + ")");
+        } else {
+            int res = JOptionPane.showConfirmDialog(this, "最新版 \n(" + App.latestVersion + ") をダウンロードする?\n(download folder: "
+                    + App.execPath.getParent().toString() + ")");
+            if (res == JOptionPane.YES_OPTION) {
+                App.download();
+                openExecPath();
+            }
+        }
+    }
 
     public void openExecPath() {
         File execFolder = new File(App.workingDir);